Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
test array of interface
  • Loading branch information
taowen committed Jan 9, 2017
1 parent 1f0a0e9 commit a57c8c6
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
4 changes: 3 additions & 1 deletion feature_reflect.go
Expand Up @@ -398,7 +398,7 @@ func decoderOfType(typ reflect.Type) (Decoder, error) {
case reflect.Bool: case reflect.Bool:
return &boolCodec{}, nil return &boolCodec{}, nil
case reflect.Interface: case reflect.Interface:
return &interfaceDecoder{}, nil return &interfaceCodec{}, nil
case reflect.Struct: case reflect.Struct:
return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(typ)) return prefix(fmt.Sprintf("[%s]", typeName)).addToDecoder(decoderOfStruct(typ))
case reflect.Slice: case reflect.Slice:
Expand Down Expand Up @@ -443,6 +443,8 @@ func encoderOfType(typ reflect.Type) (Encoder, error) {
return &float64Codec{}, nil return &float64Codec{}, nil
case reflect.Bool: case reflect.Bool:
return &boolCodec{}, nil return &boolCodec{}, nil
case reflect.Interface:
return &interfaceCodec{}, nil
case reflect.Struct: case reflect.Struct:
return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(typ)) return prefix(fmt.Sprintf("[%s]", typeName)).addToEncoder(encoderOfStruct(typ))
case reflect.Slice: case reflect.Slice:
Expand Down
8 changes: 6 additions & 2 deletions feature_reflect_native.go
Expand Up @@ -156,13 +156,17 @@ func (codec *boolCodec) encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteBool(*((*bool)(ptr))) stream.WriteBool(*((*bool)(ptr)))
} }


type interfaceDecoder struct { type interfaceCodec struct {
} }


func (decoder *interfaceDecoder) decode(ptr unsafe.Pointer, iter *Iterator) { func (codec *interfaceCodec) decode(ptr unsafe.Pointer, iter *Iterator) {
*((*interface{})(ptr)) = iter.ReadAny().Get() *((*interface{})(ptr)) = iter.ReadAny().Get()
} }


func (codec *interfaceCodec) encode(ptr unsafe.Pointer, stream *Stream) {
stream.WriteVal(*((*interface{})(ptr)))
}

type anyDecoder struct { type anyDecoder struct {
} }


Expand Down
14 changes: 14 additions & 0 deletions jsoniter_interface_test.go
@@ -0,0 +1,14 @@
package jsoniter

import (
"testing"
"github.com/json-iterator/go/require"
)

func Test_write_array_of_interface(t *testing.T) {
should := require.New(t)
array := []interface{}{"hello"}
str, err := MarshalToString(array)
should.Nil(err)
should.Equal(`["hello"]`, str)
}

0 comments on commit a57c8c6

Please sign in to comment.