mirror of
https://github.com/json-iterator/go.git
synced 2025-04-26 11:42:56 +02:00
#144 make []byte support Unmarshaler&Marshaler
This commit is contained in:
parent
1cfa233923
commit
9c358632dc
@ -285,13 +285,6 @@ func createDecoderOfType(cfg *frozenConfig, typ reflect.Type) (ValDecoder, error
|
|||||||
if typ.AssignableTo(jsoniterNumberType) {
|
if typ.AssignableTo(jsoniterNumberType) {
|
||||||
return &jsoniterNumberCodec{}, nil
|
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) {
|
if typ.Implements(unmarshalerType) {
|
||||||
templateInterface := reflect.New(typ).Elem().Interface()
|
templateInterface := reflect.New(typ).Elem().Interface()
|
||||||
var decoder ValDecoder = &unmarshalerDecoder{extractInterface(templateInterface)}
|
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)}
|
var decoder ValDecoder = &textUnmarshalerDecoder{extractInterface(templateInterface)}
|
||||||
return decoder, nil
|
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) {
|
if typ.Implements(anyType) {
|
||||||
return &anyCodec{}, nil
|
return &anyCodec{}, nil
|
||||||
}
|
}
|
||||||
@ -451,9 +451,6 @@ func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error
|
|||||||
if typ.AssignableTo(jsoniterNumberType) {
|
if typ.AssignableTo(jsoniterNumberType) {
|
||||||
return &jsoniterNumberCodec{}, nil
|
return &jsoniterNumberCodec{}, nil
|
||||||
}
|
}
|
||||||
if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
|
|
||||||
return &base64Codec{}, nil
|
|
||||||
}
|
|
||||||
if typ.Implements(marshalerType) {
|
if typ.Implements(marshalerType) {
|
||||||
checkIsEmpty, err := createCheckIsEmpty(typ)
|
checkIsEmpty, err := createCheckIsEmpty(typ)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -484,6 +481,9 @@ func createEncoderOfType(cfg *frozenConfig, typ reflect.Type) (ValEncoder, error
|
|||||||
}
|
}
|
||||||
return encoder, nil
|
return encoder, nil
|
||||||
}
|
}
|
||||||
|
if typ.Kind() == reflect.Slice && typ.Elem().Kind() == reflect.Uint8 {
|
||||||
|
return &base64Codec{}, nil
|
||||||
|
}
|
||||||
if typ.Implements(anyType) {
|
if typ.Implements(anyType) {
|
||||||
return &anyCodec{}, nil
|
return &anyCodec{}, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user