@@ -171,26 +171,22 @@ func setField(field reflect.Value, defaultVal string) error {
171171 case reflect .Map :
172172 for _ , e := range field .MapKeys () {
173173 var v = field .MapIndex (e )
174- var baseVal interface {}
174+
175175 switch v .Kind () {
176176 case reflect .Ptr :
177- baseVal = v .Elem ().Interface ()
178- default :
179- baseVal = v .Interface ()
180- }
181- ref := reflect .New (reflect .TypeOf (baseVal ))
182- ref .Elem ().Set (reflect .ValueOf (baseVal ))
183- err := Set (ref .Interface ())
184- if err == nil || err == errInvalidType {
185- var newVal reflect.Value
186- if v .Kind () == reflect .Ptr {
187- newVal = reflect .ValueOf (ref .Interface ())
188- } else {
189- newVal = reflect .ValueOf (ref .Elem ().Interface ())
177+ switch v .Elem ().Kind () {
178+ case reflect .Struct , reflect .Slice , reflect .Map :
179+ if err := setField (v .Elem (), "" ); err != nil {
180+ return err
181+ }
190182 }
191- field .SetMapIndex (e , newVal )
192- } else {
193- return err
183+ case reflect .Struct , reflect .Slice , reflect .Map :
184+ ref := reflect .New (v .Type ())
185+ ref .Elem ().Set (v )
186+ if err := setField (ref .Elem (), "" ); err != nil {
187+ return err
188+ }
189+ field .SetMapIndex (e , ref .Elem ().Convert (v .Type ()))
194190 }
195191 }
196192 }
0 commit comments