flags.go raw

   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 around *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  }
  58