-
Notifications
You must be signed in to change notification settings - Fork 2
/
flags.go
42 lines (35 loc) · 935 Bytes
/
flags.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package main
import (
"flag"
"strings"
)
type StringSliceFlag []string
func NewStringSliceFlag(slice *[]string) *StringSliceFlag {
return (*StringSliceFlag)(slice)
}
func StringSlice(name string, defaultValue []string, usage string) *[]string {
value := &[]string{}
StringSliceVar(value, name, defaultValue, usage)
return value
}
func StringSliceVar(value *[]string, name string, defaultValue []string, usage string) {
if defaultValue == nil && *value != nil {
*value = nil
} else if len(*value) != len(defaultValue) || *value == nil {
*value = make([]string, len(defaultValue))
}
copy(*value, defaultValue)
flag.Var((*StringSliceFlag)(value), name, usage)
}
func (f *StringSliceFlag) String() string {
return strings.Join(*f, ",")
}
func (f *StringSliceFlag) Set(values string) error {
if values == "" {
return nil
}
for _, val := range strings.Split(values, ",") {
*f = append(*f, val)
}
return nil
}