flags.go (1344B)
1 package viper 2 3 import "github.com/spf13/pflag" 4 5 // FlagValueSet is an interface that users can implement 6 // to bind a set of flags to viper. 7 type FlagValueSet interface { 8 VisitAll(fn func(FlagValue)) 9 } 10 11 // FlagValue is an interface that users can implement 12 // to bind different flags to viper. 13 type FlagValue interface { 14 HasChanged() bool 15 Name() string 16 ValueString() string 17 ValueType() string 18 } 19 20 // pflagValueSet is a wrapper around *pflag.ValueSet 21 // that implements FlagValueSet. 22 type pflagValueSet struct { 23 flags *pflag.FlagSet 24 } 25 26 // VisitAll iterates over all *pflag.Flag inside the *pflag.FlagSet. 27 func (p pflagValueSet) VisitAll(fn func(flag FlagValue)) { 28 p.flags.VisitAll(func(flag *pflag.Flag) { 29 fn(pflagValue{flag}) 30 }) 31 } 32 33 // pflagValue is a wrapper aroung *pflag.flag 34 // that implements FlagValue 35 type pflagValue struct { 36 flag *pflag.Flag 37 } 38 39 // HasChanged returns whether the flag has changes or not. 40 func (p pflagValue) HasChanged() bool { 41 return p.flag.Changed 42 } 43 44 // Name returns the name of the flag. 45 func (p pflagValue) Name() string { 46 return p.flag.Name 47 } 48 49 // ValueString returns the value of the flag as a string. 50 func (p pflagValue) ValueString() string { 51 return p.flag.Value.String() 52 } 53 54 // ValueType returns the type of the flag as a string. 55 func (p pflagValue) ValueType() string { 56 return p.flag.Value.Type() 57 }