@@ -38,7 +38,6 @@ type checkIsEmpty interface {
3838
3939var jsonRawMessageType reflect.Type
4040var jsoniterRawMessageType reflect.Type
41- var anyType reflect.Type
4241var marshalerType reflect.Type
4342var unmarshalerType reflect.Type
4443var textMarshalerType reflect.Type
@@ -47,7 +46,6 @@ var textUnmarshalerType reflect.Type
4746func init () {
4847 jsonRawMessageType = reflect .TypeOf ((* json .RawMessage )(nil )).Elem ()
4948 jsoniterRawMessageType = reflect .TypeOf ((* RawMessage )(nil )).Elem ()
50- anyType = reflect .TypeOf ((* Any )(nil )).Elem ()
5149 marshalerType = reflect .TypeOf ((* json .Marshaler )(nil )).Elem ()
5250 unmarshalerType = reflect .TypeOf ((* json .Unmarshaler )(nil )).Elem ()
5351 textMarshalerType = reflect .TypeOf ((* encoding .TextMarshaler )(nil )).Elem ()
@@ -105,7 +103,6 @@ func decoderOfType(cfg *frozenConfig, prefix string, typ reflect.Type) ValDecode
105103}
106104
107105func createDecoderOfType (cfg * frozenConfig , prefix string , typ reflect.Type ) ValDecoder {
108- typeName := typ .String ()
109106 decoder := createDecoderOfJsonRawMessage (cfg , prefix , typ )
110107 if decoder != nil {
111108 return decoder
@@ -118,11 +115,9 @@ func createDecoderOfType(cfg *frozenConfig, prefix string, typ reflect.Type) Val
118115 if decoder != nil {
119116 return decoder
120117 }
121- if typ == anyType {
122- return & directAnyCodec {}
123- }
124- if typ .Implements (anyType ) {
125- return & anyCodec {}
118+ decoder = createDecoderOfAny (cfg , prefix , typ )
119+ if decoder != nil {
120+ return decoder
126121 }
127122 decoder = createDecoderOfNative (cfg , prefix , typ )
128123 if decoder != nil {
@@ -230,15 +225,31 @@ func createEncoderOfType(cfg *frozenConfig, prefix string, typ reflect.Type) Val
230225 if encoder != nil {
231226 return encoder
232227 }
233- if typ == anyType {
234- return & directAnyCodec {}
228+ encoder = createEncoderOfAny (cfg , prefix , typ )
229+ if encoder != nil {
230+ return encoder
235231 }
236- if typ .Implements (anyType ) {
237- return & anyCodec {
238- valType : reflect2 .Type2 (typ ),
239- }
232+ encoder = createEncoderOfNative (cfg , prefix , typ )
233+ if encoder != nil {
234+ return encoder
235+ }
236+ kind := typ .Kind ()
237+ switch kind {
238+ case reflect .Interface :
239+ return & dynamicEncoder {reflect2 .Type2 (typ )}
240+ case reflect .Struct :
241+ return encoderOfStruct (cfg , prefix , typ )
242+ case reflect .Array :
243+ return encoderOfArray (cfg , prefix , typ )
244+ case reflect .Slice :
245+ return encoderOfSlice (cfg , prefix , typ )
246+ case reflect .Map :
247+ return encoderOfMap (cfg , prefix , typ )
248+ case reflect .Ptr :
249+ return encoderOfOptional (cfg , prefix , typ )
250+ default :
251+ return & lazyErrorEncoder {err : fmt .Errorf ("%s%s is unsupported type" , prefix , typ .String ())}
240252 }
241- return createEncoderOfSimpleType (cfg , prefix , typ )
242253}
243254
244255func createCheckIsEmpty (cfg * frozenConfig , typ reflect.Type ) checkIsEmpty {
@@ -291,29 +302,6 @@ func createCheckIsEmpty(cfg *frozenConfig, typ reflect.Type) checkIsEmpty {
291302 }
292303}
293304
294- func createEncoderOfSimpleType (cfg * frozenConfig , prefix string , typ reflect.Type ) ValEncoder {
295- encoder := createEncoderOfNative (cfg , prefix , typ )
296- if encoder != nil {
297- return encoder
298- }
299- kind := typ .Kind ()
300- switch kind {
301- case reflect .Interface :
302- return & dynamicEncoder {reflect2 .Type2 (typ )}
303- case reflect .Struct :
304- return encoderOfStruct (cfg , prefix , typ )
305- case reflect .Array :
306- return encoderOfArray (cfg , prefix , typ )
307- case reflect .Slice :
308- return encoderOfSlice (cfg , prefix , typ )
309- case reflect .Map :
310- return encoderOfMap (cfg , prefix , typ )
311- case reflect .Ptr :
312- return encoderOfOptional (cfg , prefix , typ )
313- default :
314- return & lazyErrorEncoder {err : fmt .Errorf ("%s%s is unsupported type" , prefix , typ .String ())}
315- }
316- }
317305
318306type placeholderDecoder struct {
319307 cfg * frozenConfig
0 commit comments