diff options
| author | Eric Paris <[email protected]> | 2015-06-01 00:23:40 -0400 |
|---|---|---|
| committer | Eric Paris <[email protected]> | 2015-06-22 15:21:12 -0400 |
| commit | 29224ee030bd4e687e95d1d8df55303269b49337 (patch) | |
| tree | 6d47e7ce7f8aaab6bde38250866301d7a06fafa3 /string_slice.go | |
| parent | 0367f40254871b491ab74dbe3cc237f06fb34f27 (diff) | |
Add new StringSlice flag type
Arguments passed on the command line will be split on "," and will be
stored in a slice.
We can see this already exits in codegangsta/cli
https://github.com/codegangsta/cli/blob/44d40054fa6208a3013d7217aca72a2b8b0f5a0b/flag.go#L102
And people have written their own implementations for cobra/pflag
https://github.com/GoogleCloudPlatform/kubernetes/blob/c5ba95ee26cbec9694a780544b559a797956ea54/pkg/util/list.go
Lets just make it a first class flag
Diffstat (limited to 'string_slice.go')
| -rw-r--r-- | string_slice.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/string_slice.go b/string_slice.go new file mode 100644 index 0000000..bbe6e00 --- /dev/null +++ b/string_slice.go @@ -0,0 +1,86 @@ +package pflag + +import ( + "strings" +) + +// -- stringSlice Value +type stringSliceValue []string + +func newStringSliceValue(val []string, p *[]string) *stringSliceValue { + *p = val + return (*stringSliceValue)(p) +} + +func (s *stringSliceValue) Set(val string) error { + v := strings.Split(val, ",") + *s = stringSliceValue(v) + return nil +} +func (s *stringSliceValue) Type() string { + return "stringSlice" +} + +func (s *stringSliceValue) String() string { return strings.Join(*s, ",") } + +func stringSliceConv(sval string) (interface{}, error) { + v := strings.Split(sval, ",") + return v, nil +} + +// GetStringSlice return the []string value of a flag with the given name +func (f *FlagSet) GetStringSlice(name string) ([]string, error) { + val, err := f.getFlagType(name, "stringSlice", stringSliceConv) + if err != nil { + return []string{}, err + } + return val.([]string), nil +} + +// StringSliceVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) { + f.VarP(newStringSliceValue(value, p), name, "", usage) +} + +// Like StringSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) { + f.VarP(newStringSliceValue(value, p), name, shorthand, usage) +} + +// StringSliceVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +func StringSliceVar(p *[]string, name string, value []string, usage string) { + CommandLine.VarP(newStringSliceValue(value, p), name, "", usage) +} + +// Like StringSliceVar, but accepts a shorthand letter that can be used after a single dash. +func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) { + CommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage) +} + +// StringSlice defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string { + p := make([]string, 0) + f.StringSliceVarP(&p, name, "", value, usage) + return &p +} + +// Like StringSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string { + p := make([]string, 0) + f.StringSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// StringSlice defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +func StringSlice(name string, value []string, usage string) *[]string { + return CommandLine.StringSliceP(name, "", value, usage) +} + +// Like StringSlice, but accepts a shorthand letter that can be used after a single dash. +func StringSliceP(name, shorthand string, value []string, usage string) *[]string { + return CommandLine.StringSliceP(name, shorthand, value, usage) +} |
