/
map_flags.go
66 lines (62 loc) 路 1.5 KB
/
map_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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package cmdutil
import (
"github.com/spf13/pflag"
"github.com/algolia/cli/pkg/utils"
)
// FlagValuesMap returns a map of flag values for the given FlagSet.
func FlagValuesMap(flags *pflag.FlagSet, only ...string) (map[string]interface{}, error) {
values := make(map[string]interface{})
flags.Visit(func(flag *pflag.Flag) {
// Skip if we only want to load a subset of flags.
if only != nil && !utils.Contains(only, flag.Name) {
return
}
switch flag.Value.Type() {
case "string":
val, err := flags.GetString(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "int":
val, err := flags.GetInt(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "bool":
val, err := flags.GetBool(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "float64":
val, err := flags.GetFloat64(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "stringSlice":
val, err := flags.GetStringSlice(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "intSlice":
val, err := flags.GetIntSlice(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "boolSlice":
val, err := flags.GetBoolSlice(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "float64Slice":
val, err := flags.GetFloat64Slice(flag.Name)
if err == nil {
values[flag.Name] = val
}
case "json":
values[flag.Name] = flag.Value.(*JSONValue).Value
default:
panic("unsupported flag type")
}
})
return values, nil
}