diff --git a/core/mapping/utils.go b/core/mapping/utils.go index 7d4861da..64d0d3d4 100644 --- a/core/mapping/utils.go +++ b/core/mapping/utils.go @@ -153,58 +153,57 @@ func doParseKeyAndOptions(field reflect.StructField, value string) (string, *fie key := strings.TrimSpace(segments[0]) options := segments[1:] - if len(options) > 0 { - var fieldOpts fieldOptions - - for _, segment := range options { - option := strings.TrimSpace(segment) - switch { - case option == stringOption: - fieldOpts.FromString = true - case strings.HasPrefix(option, optionalOption): - segs := strings.Split(option, equalToken) - switch len(segs) { - case 1: - fieldOpts.Optional = true - case 2: - fieldOpts.Optional = true - fieldOpts.OptionalDep = segs[1] - default: - return "", nil, fmt.Errorf("field %s has wrong optional", field.Name) - } - case option == optionalOption: + if len(options) == 0 { + return key, nil, nil + } + + var fieldOpts fieldOptions + for _, segment := range options { + option := strings.TrimSpace(segment) + switch { + case option == stringOption: + fieldOpts.FromString = true + case strings.HasPrefix(option, optionalOption): + segs := strings.Split(option, equalToken) + switch len(segs) { + case 1: + fieldOpts.Optional = true + case 2: fieldOpts.Optional = true - case strings.HasPrefix(option, optionsOption): - segs := strings.Split(option, equalToken) - if len(segs) != 2 { - return "", nil, fmt.Errorf("field %s has wrong options", field.Name) - } else { - fieldOpts.Options = strings.Split(segs[1], optionSeparator) - } - case strings.HasPrefix(option, defaultOption): - segs := strings.Split(option, equalToken) - if len(segs) != 2 { - return "", nil, fmt.Errorf("field %s has wrong default option", field.Name) - } else { - fieldOpts.Default = strings.TrimSpace(segs[1]) - } - case strings.HasPrefix(option, rangeOption): - segs := strings.Split(option, equalToken) - if len(segs) != 2 { - return "", nil, fmt.Errorf("field %s has wrong range", field.Name) - } - if nr, err := parseNumberRange(segs[1]); err != nil { - return "", nil, err - } else { - fieldOpts.Range = nr - } + fieldOpts.OptionalDep = segs[1] + default: + return "", nil, fmt.Errorf("field %s has wrong optional", field.Name) + } + case option == optionalOption: + fieldOpts.Optional = true + case strings.HasPrefix(option, optionsOption): + segs := strings.Split(option, equalToken) + if len(segs) != 2 { + return "", nil, fmt.Errorf("field %s has wrong options", field.Name) + } else { + fieldOpts.Options = strings.Split(segs[1], optionSeparator) + } + case strings.HasPrefix(option, defaultOption): + segs := strings.Split(option, equalToken) + if len(segs) != 2 { + return "", nil, fmt.Errorf("field %s has wrong default option", field.Name) + } else { + fieldOpts.Default = strings.TrimSpace(segs[1]) + } + case strings.HasPrefix(option, rangeOption): + segs := strings.Split(option, equalToken) + if len(segs) != 2 { + return "", nil, fmt.Errorf("field %s has wrong range", field.Name) + } + if nr, err := parseNumberRange(segs[1]); err != nil { + return "", nil, err + } else { + fieldOpts.Range = nr } } - - return key, &fieldOpts, nil } - return key, nil, nil + return key, &fieldOpts, nil } func implicitValueRequiredStruct(tag string, tp reflect.Type) (bool, error) {