-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbind_flags.go
89 lines (85 loc) · 2.68 KB
/
bind_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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package mermaid
import (
"github.com/spf13/cobra"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
// BindFlags will bind cobra flagset to viper as default value.
func BindFlags(cmd *cobra.Command, cfg *viper.Viper) error {
// Need to set viper.typeByDefaultValue to true to get the value with correct type.
cfg.SetTypeByDefaultValue(true)
cmd.Flags().VisitAll(func(flag *pflag.Flag) {
// cfg.SetDefault(flag.Name, flag.Value.flag.Value.Type())
var val interface{}
switch flag.Value.Type() {
case "bool":
val, _ = cmd.Flags().GetBool(flag.Name)
case "boolSlice":
val, _ = cmd.Flags().GetBoolSlice(flag.Name)
case "bytesHex":
val, _ = cmd.Flags().GetBytesHex(flag.Name)
case "count":
val, _ = cmd.Flags().GetCount(flag.Name)
case "duration":
val, _ = cmd.Flags().GetDuration(flag.Name)
case "durationSlice":
val, _ = cmd.Flags().GetDurationSlice(flag.Name)
case "float32":
val, _ = cmd.Flags().GetFloat32(flag.Name)
case "float32Slice":
val, _ = cmd.Flags().GetFloat32Slice(flag.Name)
case "float64":
val, _ = cmd.Flags().GetFloat64(flag.Name)
case "float64Slice":
val, _ = cmd.Flags().GetFloat64Slice(flag.Name)
case "int":
val, _ = cmd.Flags().GetInt(flag.Name)
case "int8":
val, _ = cmd.Flags().GetInt8(flag.Name)
case "int16":
val, _ = cmd.Flags().GetInt16(flag.Name)
case "int32":
val, _ = cmd.Flags().GetInt32(flag.Name)
case "int64":
val, _ = cmd.Flags().GetInt64(flag.Name)
case "int32Slice":
val, _ = cmd.Flags().GetInt32Slice(flag.Name)
case "int64Slice":
val, _ = cmd.Flags().GetInt64Slice(flag.Name)
case "ip":
val, _ = cmd.Flags().GetIP(flag.Name)
case "ipSlice":
val, _ = cmd.Flags().GetIPSlice(flag.Name)
case "ipMask":
val, _ = cmd.Flags().GetIPv4Mask(flag.Name)
case "ipNet":
val, _ = cmd.Flags().GetIPNet(flag.Name)
case "string":
val, _ = cmd.Flags().GetString(flag.Name)
case "stringSlice":
val, _ = cmd.Flags().GetStringSlice(flag.Name)
case "stringArray":
val, _ = cmd.Flags().GetStringArray(flag.Name)
case "stringToInt":
val, _ = cmd.Flags().GetStringToInt(flag.Name)
case "stringToInt64":
val, _ = cmd.Flags().GetStringToInt64(flag.Name)
case "stringToString":
val, _ = cmd.Flags().GetStringToString(flag.Name)
case "uint":
val, _ = cmd.Flags().GetUint(flag.Name)
case "uint8":
val, _ = cmd.Flags().GetUint8(flag.Name)
case "uint16":
val, _ = cmd.Flags().GetUint16(flag.Name)
case "uint32":
val, _ = cmd.Flags().GetUint32(flag.Name)
case "uint64":
val, _ = cmd.Flags().GetUint64(flag.Name)
case "uintSlice":
val, _ = cmd.Flags().GetUintSlice(flag.Name)
}
cfg.SetDefault(flag.Name, val)
})
return cfg.BindPFlags(cmd.Flags())
}