You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
87 lines
2.0 KiB
87 lines
2.0 KiB
11 months ago
|
package field
|
||
|
|
||
|
import "fmt"
|
||
|
|
||
|
//go:generate stringer -type=Kind -linecomment -output=kind_string.go
|
||
|
|
||
|
type Kind int
|
||
|
|
||
|
const (
|
||
|
KindAny Kind = iota // any
|
||
|
KindArray // array
|
||
|
KindNil // nil
|
||
|
KindString // string
|
||
|
KindBool // bool
|
||
|
KindInt64 // int64
|
||
|
KindUint64 // uint64
|
||
|
KindFloat32 // float32
|
||
|
KindFloat64 // float64
|
||
|
KindComplex128 // complex128
|
||
|
KindBinary // bytes
|
||
|
KindDuration // duration
|
||
|
KindTime // time
|
||
|
KindError // error
|
||
|
KindGroup // group
|
||
|
KindClosure // closure
|
||
|
)
|
||
|
|
||
|
func (l Kind) MarshalJSON() ([]byte, error) {
|
||
|
return []byte("\"" + l.String() + "\""), nil
|
||
|
}
|
||
|
|
||
|
func (l *Kind) UnmarshalJSON(in []byte) error {
|
||
|
return l.UnmarshalText(in[1 : len(in)-1])
|
||
|
}
|
||
|
|
||
|
func (l Kind) MarshalText() ([]byte, error) {
|
||
|
return []byte(l.String()), nil
|
||
|
}
|
||
|
|
||
|
//nolint:gocyclo,cyclop
|
||
|
func (l *Kind) UnmarshalText(in []byte) error {
|
||
|
switch string(in) {
|
||
|
case KindAny.String():
|
||
|
*l = KindAny
|
||
|
case KindArray.String():
|
||
|
*l = KindArray
|
||
|
case KindNil.String():
|
||
|
*l = KindNil
|
||
|
case KindString.String():
|
||
|
*l = KindString
|
||
|
case KindBool.String():
|
||
|
*l = KindBool
|
||
|
case KindInt64.String():
|
||
|
*l = KindInt64
|
||
|
case KindUint64.String():
|
||
|
*l = KindUint64
|
||
|
case KindFloat32.String():
|
||
|
*l = KindFloat32
|
||
|
case KindFloat64.String():
|
||
|
*l = KindFloat64
|
||
|
case KindComplex128.String():
|
||
|
*l = KindComplex128
|
||
|
case KindBinary.String():
|
||
|
*l = KindBinary
|
||
|
case KindDuration.String():
|
||
|
*l = KindDuration
|
||
|
case KindTime.String():
|
||
|
*l = KindTime
|
||
|
case KindError.String():
|
||
|
*l = KindError
|
||
|
case KindGroup.String():
|
||
|
*l = KindGroup
|
||
|
case KindClosure.String():
|
||
|
*l = KindClosure
|
||
|
}
|
||
|
|
||
|
return fmt.Errorf("%w:filed(%v)", ErrUndefined, string(in))
|
||
|
}
|
||
|
|
||
|
func (l Kind) MarshalBinary() ([]byte, error) {
|
||
|
return []byte(l.String()), nil
|
||
|
}
|
||
|
|
||
|
func (l *Kind) UnmarshalBinary(in []byte) error {
|
||
|
return l.UnmarshalText(in)
|
||
|
}
|