...
1
16
17 package encoder
18
19 import (
20 `encoding`
21 `encoding/json`
22 `reflect`
23 )
24
25 var (
26 byteType = reflect.TypeOf(byte(0))
27 jsonNumberType = reflect.TypeOf(json.Number(""))
28 jsonUnsupportedValueType = reflect.TypeOf(new(json.UnsupportedValueError))
29 )
30
31 var (
32 errorType = reflect.TypeOf((*error)(nil)).Elem()
33 jsonMarshalerType = reflect.TypeOf((*json.Marshaler)(nil)).Elem()
34 encodingTextMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
35 )
36
37 func isSimpleByte(vt reflect.Type) bool {
38 if vt.Kind() != byteType.Kind() {
39 return false
40 } else {
41 return !isEitherMarshaler(vt) && !isEitherMarshaler(reflect.PtrTo(vt))
42 }
43 }
44
45 func isEitherMarshaler(vt reflect.Type) bool {
46 return vt.Implements(jsonMarshalerType) || vt.Implements(encodingTextMarshalerType)
47 }
48
View as plain text