diff options
| author | K3A <[email protected]> | 2017-03-09 18:25:56 +0100 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-03-09 18:25:56 +0100 |
| commit | b413f8dfb0b6a402b0c048d3a0c582a9f677f98b (patch) | |
| tree | 730568a77df398d2e301759125f7287c44935918 /parse.go | |
| parent | 9e6f80aa9097a84b3a55750bb83a2afebedc30f0 (diff) | |
| parent | e6e0f59a1777b399abbd2ad840811ad5d6bab04e (diff) | |
Merge branch 'master' into master
Diffstat (limited to 'parse.go')
| -rw-r--r-- | parse.go | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -20,6 +20,7 @@ type spec struct { multiple bool required bool positional bool + separate bool help string env string wasPresent bool @@ -189,6 +190,8 @@ func NewParser(config Config, dests ...interface{}) (*Parser, error) { spec.required = true case key == "positional": spec.positional = true + case key == "separate": + spec.separate = true case key == "help": spec.help = value case key == "env": @@ -314,11 +317,14 @@ func process(specs []*spec, args []string) error { for i+1 < len(args) && !isFlag(args[i+1]) { values = append(values, args[i+1]) i++ + if spec.separate { + break + } } } else { values = append(values, value) } - err := setSlice(spec.dest, values) + err := setSlice(spec.dest, values, !spec.separate) if err != nil { return fmt.Errorf("error processing %s: %v", arg, err) } @@ -350,7 +356,7 @@ func process(specs []*spec, args []string) error { for _, spec := range specs { if spec.positional { if spec.multiple { - err := setSlice(spec.dest, positionals) + err := setSlice(spec.dest, positionals, true) if err != nil { return fmt.Errorf("error processing %s: %v", spec.long, err) } @@ -388,7 +394,7 @@ func validate(spec []*spec) error { } // parse a value as the appropriate type and store it in the struct -func setSlice(dest reflect.Value, values []string) error { +func setSlice(dest reflect.Value, values []string, trunc bool) error { if !dest.CanSet() { return fmt.Errorf("field is not writable") } @@ -401,7 +407,7 @@ func setSlice(dest reflect.Value, values []string) error { } // Truncate the dest slice in case default values exist - if !dest.IsNil() { + if trunc && !dest.IsNil() { dest.SetLen(0) } |
