From 9c358632dc6eac53a4940b59266c805024e38e37 Mon Sep 17 00:00:00 2001 From: Tao Wen Date: Wed, 9 Aug 2017 13:59:40 +0800 Subject: [PATCH] #144 make []byte support Unmarshaler&Marshaler --- feature_reflect.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/feature_reflect.go b/feature_reflect.go index 8e4134d..05d91b4 100644 --- a/feature_reflect.go +++ b/feature_reflect.go @@ -285,13 +285,6 @@ func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error 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 { - return nil, err - } - return &base64Codec{sliceDecoder: sliceDecoder}, nil - } if typ.Implements(unmarshalerType) { templateInterface := reflect.New(typ).Elem().Interface() var decoder ValDecoder = &unmarshalerDecoder{extractInterface(templateInterface)} @@ -318,6 +311,13 @@ func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error var decoder ValDecoder = &textUnmarshalerDecoder{extractInterface(templateInterface)} return decoder, nil } + if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 { + sliceDecoder, err := prefix("[slice]").addToDecoder(decoderOfSlice(cfg, typ)) + if err != nil { + return nil, err + } + return &base64Codec{sliceDecoder: sliceDecoder}, nil + } if typ.Implements(anyType) { return &anyCodec{}, nil } @@ -451,9 +451,6 @@ func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error if typ.AssignableTo(jsoniterNumberType) { return &jsoniterNumberCodec{}, nil } - if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 { - return &base64Codec{}, nil - } if typ.Implements(marshalerType) { checkIsEmpty, err := createCheckIsEmpty(typ) if err != nil { @@ -484,6 +481,9 @@ func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error } return encoder, nil } + if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 { + return &base64Codec{}, nil + } if typ.Implements(anyType) { return &anyCodec{}, nil }