From e3ba0e7b7e5c8d1ae68076a2ae7b23a9244d7b0e Mon Sep 17 00:00:00 2001 From: Tao Wen Date: Sat, 1 Jul 2017 09:27:48 +0800 Subject: [PATCH] #93 fix omitempty within embedded struct --- feature_reflect_extension.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/feature_reflect_extension.go b/feature_reflect_extension.go index 9477fef..45caf19 100644 --- a/feature_reflect_extension.go +++ b/feature_reflect_extension.go @@ -208,7 +208,8 @@ func describeStruct(cfg *frozenConfig, typ reflect.Type) (*StructDescriptor, err } for _, binding := range structDescriptor.Fields { binding.levels = append([]int{i}, binding.levels...) - binding.Encoder = &structFieldEncoder{&field, binding.Encoder, false} + omitempty := binding.Encoder.(*structFieldEncoder).omitempty + binding.Encoder = &structFieldEncoder{&field, binding.Encoder, omitempty} binding.Decoder = &structFieldDecoder{&field, binding.Decoder} embeddedBindings = append(embeddedBindings, binding) } @@ -220,8 +221,9 @@ func describeStruct(cfg *frozenConfig, typ reflect.Type) (*StructDescriptor, err } for _, binding := range structDescriptor.Fields { binding.levels = append([]int{i}, binding.levels...) + omitempty := binding.Encoder.(*structFieldEncoder).omitempty binding.Encoder = &optionalEncoder{binding.Encoder} - binding.Encoder = &structFieldEncoder{&field, binding.Encoder, false} + binding.Encoder = &structFieldEncoder{&field, binding.Encoder, omitempty} binding.Decoder = &deferenceDecoder{field.Type.Elem(), binding.Decoder} binding.Decoder = &structFieldDecoder{&field, binding.Decoder} embeddedBindings = append(embeddedBindings, binding)