package config import "github.com/spf13/pflag" // FlagValueSet is an interface that users can implement // to bind a set of flags to viper. type FlagValueSet interface { VisitAll(fn func(FlagValue)) } // FlagValue is an interface that users can implement // to bind different flags to viper. type FlagValue interface { HasChanged() bool Name() string ValueString() string ValueType() string } // pflagValueSet is a wrapper around *pflag.ValueSet // that implements FlagValueSet. type pflagValueSet struct { flags *pflag.FlagSet } // VisitAll iterates over all *pflag.Flag inside the *pflag.FlagSet. func (p pflagValueSet) VisitAll(fn func(flag FlagValue)) { p.flags.VisitAll(func(flag *pflag.Flag) { fn(pflagValue{flag}) }) } // pflagValue is a wrapper aroung *pflag.flag // that implements FlagValue type pflagValue struct { flag *pflag.Flag } // HasChanges returns whether the flag has changes or not. func (p pflagValue) HasChanged() bool { return p.flag.Changed } // Name returns the name of the flag. func (p pflagValue) Name() string { return p.flag.Name } // ValueString returns the value of the flag as a string. func (p pflagValue) ValueString() string { return p.flag.Value.String() } // ValueType returns the type of the flag as a string. func (p pflagValue) ValueType() string { return p.flag.Value.Type() }