From 9dbc6d1bf98487350e3ab64659d8948950a66259 Mon Sep 17 00:00:00 2001 From: "DESKTOP-NJM1EHE\\vlad" Date: Sat, 2 Feb 2019 21:55:42 +0200 Subject: [PATCH] improved getStructFields: for anonymous field that is not struct. testCase: type DurationInSeconds struct { time.Duration } func(dis DurationInSeconds) func1() {} func(dis DurationInSeconds) func2() {} --- gen/decoder.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/gen/decoder.go b/gen/decoder.go index 606602f..52b0e26 100644 --- a/gen/decoder.go +++ b/gen/decoder.go @@ -341,6 +341,7 @@ func getStructFields(t reflect.Type) ([]reflect.StructField, error) { } var efields []reflect.StructField + var fields []reflect.StructField for i := 0; i < t.NumField(); i++ { f := t.Field(i) if !f.Anonymous { @@ -352,14 +353,20 @@ func getStructFields(t reflect.Type) ([]reflect.StructField, error) { t1 = t1.Elem() } - fs, err := getStructFields(t1) - if err != nil { - return nil, fmt.Errorf("error processing embedded field: %v", err) + if t1.Kind() == reflect.Struct { + fs, err := getStructFields(t1) + if err != nil { + return nil, fmt.Errorf("error processing embedded field: %v", err) + } + efields = mergeStructFields(efields, fs) + } else { + if strings.Contains(f.Name, ".") || unicode.IsUpper([]rune(f.Name)[0]) { + fields = append(fields, f) + } } - efields = mergeStructFields(efields, fs) } - var fields []reflect.StructField + for i := 0; i < t.NumField(); i++ { f := t.Field(i) if f.Anonymous {