diff options
Diffstat (limited to 'util/viper.go')
-rw-r--r-- | util/viper.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/util/viper.go b/util/viper.go new file mode 100644 index 0000000..0f08a6c --- /dev/null +++ b/util/viper.go | |||
@@ -0,0 +1,36 @@ | |||
1 | package util | ||
2 | |||
3 | import ( | ||
4 | "strings" | ||
5 | |||
6 | "github.com/spf13/cobra" | ||
7 | "github.com/spf13/viper" | ||
8 | ) | ||
9 | |||
10 | type ViperWrap struct { | ||
11 | cmd *cobra.Command | ||
12 | } | ||
13 | |||
14 | func WrapViper(cmd *cobra.Command, prefix string) *ViperWrap { | ||
15 | viper.SetEnvPrefix(prefix) | ||
16 | viper.AutomaticEnv() | ||
17 | return &ViperWrap{cmd} | ||
18 | } | ||
19 | |||
20 | func (v *ViperWrap) bindViper(name, short string, defaultv interface{}, help string) { | ||
21 | vname := strings.ReplaceAll(name, "-", "_") | ||
22 | viper.BindPFlag(vname, v.cmd.Flags().Lookup(name)) | ||
23 | viper.SetDefault(vname, defaultv) | ||
24 | } | ||
25 | |||
26 | func (v *ViperWrap) BindString(name, short, defaultv, help string) *ViperWrap { | ||
27 | v.cmd.Flags().StringP(name, short, defaultv, help) | ||
28 | v.bindViper(name, short, defaultv, help) | ||
29 | return v | ||
30 | } | ||
31 | |||
32 | func (v *ViperWrap) BindBool(name, short string, defaultv bool, help string) *ViperWrap { | ||
33 | v.cmd.Flags().BoolP(name, short, defaultv, help) | ||
34 | v.bindViper(name, short, defaultv, help) | ||
35 | return v | ||
36 | } | ||