FlagValuesMap returns a map of flag values for the given FlagSet.
(flags *pflag.FlagSet, only ...string)
| 8 | |
| 9 | // FlagValuesMap returns a map of flag values for the given FlagSet. |
| 10 | func FlagValuesMap(flags *pflag.FlagSet, only ...string) (map[string]interface{}, error) { |
| 11 | values := make(map[string]interface{}) |
| 12 | |
| 13 | flags.Visit(func(flag *pflag.Flag) { |
| 14 | // Skip if we only want to load a subset of flags. |
| 15 | if only != nil && !utils.Contains(only, flag.Name) { |
| 16 | return |
| 17 | } |
| 18 | switch flag.Value.Type() { |
| 19 | case "string": |
| 20 | val, err := flags.GetString(flag.Name) |
| 21 | if err == nil { |
| 22 | values[flag.Name] = val |
| 23 | } |
| 24 | case "int": |
| 25 | val, err := flags.GetInt(flag.Name) |
| 26 | if err == nil { |
| 27 | values[flag.Name] = val |
| 28 | } |
| 29 | case "bool": |
| 30 | val, err := flags.GetBool(flag.Name) |
| 31 | if err == nil { |
| 32 | values[flag.Name] = val |
| 33 | } |
| 34 | case "float64": |
| 35 | val, err := flags.GetFloat64(flag.Name) |
| 36 | if err == nil { |
| 37 | values[flag.Name] = val |
| 38 | } |
| 39 | case "stringSlice": |
| 40 | val, err := flags.GetStringSlice(flag.Name) |
| 41 | if err == nil { |
| 42 | values[flag.Name] = val |
| 43 | } |
| 44 | case "intSlice": |
| 45 | val, err := flags.GetIntSlice(flag.Name) |
| 46 | if err == nil { |
| 47 | values[flag.Name] = val |
| 48 | } |
| 49 | case "boolSlice": |
| 50 | val, err := flags.GetBoolSlice(flag.Name) |
| 51 | if err == nil { |
| 52 | values[flag.Name] = val |
| 53 | } |
| 54 | case "float64Slice": |
| 55 | val, err := flags.GetFloat64Slice(flag.Name) |
| 56 | if err == nil { |
| 57 | values[flag.Name] = val |
| 58 | } |
| 59 | case "json": |
| 60 | values[flag.Name] = flag.Value.(*JSONValue).Value |
| 61 | default: |
| 62 | panic("unsupported flag type") |
| 63 | } |
| 64 | }) |
| 65 | return values, nil |
| 66 | } |