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 {