|
|
@@ -51,6 +51,7 @@ func WriteToStream(val interface{}, stream *Stream, encoder ValEncoder) {
|
|
|
}
|
|
|
|
|
|
var jsonNumberType reflect.Type
|
|
|
+var jsoniterNumberType reflect.Type
|
|
|
var jsonRawMessageType reflect.Type
|
|
|
var jsoniterRawMessageType reflect.Type
|
|
|
var anyType reflect.Type
|
|
|
@@ -61,6 +62,7 @@ var textUnmarshalerType reflect.Type
|
|
|
|
|
|
func init() {
|
|
|
jsonNumberType = reflect.TypeOf((*json.Number)(nil)).Elem()
|
|
|
+ jsoniterNumberType = reflect.TypeOf((*Number)(nil)).Elem()
|
|
|
jsonRawMessageType = reflect.TypeOf((*json.RawMessage)(nil)).Elem()
|
|
|
jsoniterRawMessageType = reflect.TypeOf((*RawMessage)(nil)).Elem()
|
|
|
anyType = reflect.TypeOf((*Any)(nil)).Elem()
|
|
|
@@ -280,6 +282,9 @@ func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error
|
|
|
if typ.AssignableTo(jsonNumberType) {
|
|
|
return &jsonNumberCodec{}, nil
|
|
|
}
|
|
|
+ if typ.AssignableTo(jsoniterNumberType) {
|
|
|
+ return &jsoniterNumberCodec{}, nil
|
|
|
+ }
|
|
|
if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
|
|
|
sliceDecoder, err := prefix("[slice]").addToDecoder(decoderOfSlice(cfg, typ))
|
|
|
if err != nil {
|
|
|
@@ -443,6 +448,9 @@ func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error
|
|
|
if typ.AssignableTo(jsonNumberType) {
|
|
|
return &jsonNumberCodec{}, nil
|
|
|
}
|
|
|
+ if typ.AssignableTo(jsoniterNumberType) {
|
|
|
+ return &jsoniterNumberCodec{}, nil
|
|
|
+ }
|
|
|
if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
|
|
|
return &base64Codec{}, nil
|
|
|
}
|