From d7ea1acd3f5c97dd83d3f0ffbf5b257083660763 Mon Sep 17 00:00:00 2001 From: Tao Wen Date: Fri, 23 Jun 2017 07:45:18 +0800 Subject: [PATCH] #63 fix embed struct at last --- feature_reflect_extension.go | 2 ++ jsoniter_object_test.go | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/feature_reflect_extension.go b/feature_reflect_extension.go index 4a7a12d..fe705b3 100644 --- a/feature_reflect_extension.go +++ b/feature_reflect_extension.go @@ -203,6 +203,8 @@ func describeStruct(cfg *frozenConfig, typ reflect.Type) (*StructDescriptor, err return nil, err } for _, binding := range structDescriptor.Fields { + binding.Encoder = &structFieldEncoder{&field, binding.Encoder, false} + binding.Decoder = &structFieldDecoder{&field, binding.Decoder} anonymousBindings = append(anonymousBindings, binding) } } else if field.Type.Kind() == reflect.Ptr && field.Type.Elem().Kind() == reflect.Struct { diff --git a/jsoniter_object_test.go b/jsoniter_object_test.go index 036416b..c484499 100644 --- a/jsoniter_object_test.go +++ b/jsoniter_object_test.go @@ -407,6 +407,25 @@ func Test_shadow_struct_field(t *testing.T) { should.Contains(output, `"max_age":20`) } +func Test_embed_at_last(t *testing.T) { + type Base struct { + Type string `json:"type"` + } + + type Struct struct { + Field string `json:"field"` + FieldType string `json:"field_type"` + Base + } + should := require.New(t) + s := Struct{Field: "field", FieldType: "field_type", Base: Base{"type"}} + output, err := MarshalToString(s) + should.Nil(err) + should.Contains(output, `"type":"type"`) + should.Contains(output, `"field":"field"`) + should.Contains(output, `"field_type":"field_type"`) +} + func Test_decode_nested(t *testing.T) { type StructOfString struct { Field1 string