duration.go raw

   1  package pflag
   2  
   3  import (
   4  	"time"
   5  )
   6  
   7  // -- time.Duration Value
   8  type durationValue time.Duration
   9  
  10  func newDurationValue(val time.Duration, p *time.Duration) *durationValue {
  11  	*p = val
  12  	return (*durationValue)(p)
  13  }
  14  
  15  func (d *durationValue) Set(s string) error {
  16  	v, err := time.ParseDuration(s)
  17  	*d = durationValue(v)
  18  	return err
  19  }
  20  
  21  func (d *durationValue) Type() string {
  22  	return "duration"
  23  }
  24  
  25  func (d *durationValue) String() string { return (*time.Duration)(d).String() }
  26  
  27  func durationConv(sval string) (interface{}, error) {
  28  	return time.ParseDuration(sval)
  29  }
  30  
  31  // GetDuration return the duration value of a flag with the given name
  32  func (f *FlagSet) GetDuration(name string) (time.Duration, error) {
  33  	val, err := f.getFlagType(name, "duration", durationConv)
  34  	if err != nil {
  35  		return 0, err
  36  	}
  37  	return val.(time.Duration), nil
  38  }
  39  
  40  // DurationVar defines a time.Duration flag with specified name, default value, and usage string.
  41  // The argument p points to a time.Duration variable in which to store the value of the flag.
  42  func (f *FlagSet) DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
  43  	f.VarP(newDurationValue(value, p), name, "", usage)
  44  }
  45  
  46  // DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.
  47  func (f *FlagSet) DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {
  48  	f.VarP(newDurationValue(value, p), name, shorthand, usage)
  49  }
  50  
  51  // DurationVar defines a time.Duration flag with specified name, default value, and usage string.
  52  // The argument p points to a time.Duration variable in which to store the value of the flag.
  53  func DurationVar(p *time.Duration, name string, value time.Duration, usage string) {
  54  	CommandLine.VarP(newDurationValue(value, p), name, "", usage)
  55  }
  56  
  57  // DurationVarP is like DurationVar, but accepts a shorthand letter that can be used after a single dash.
  58  func DurationVarP(p *time.Duration, name, shorthand string, value time.Duration, usage string) {
  59  	CommandLine.VarP(newDurationValue(value, p), name, shorthand, usage)
  60  }
  61  
  62  // Duration defines a time.Duration flag with specified name, default value, and usage string.
  63  // The return value is the address of a time.Duration variable that stores the value of the flag.
  64  func (f *FlagSet) Duration(name string, value time.Duration, usage string) *time.Duration {
  65  	p := new(time.Duration)
  66  	f.DurationVarP(p, name, "", value, usage)
  67  	return p
  68  }
  69  
  70  // DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.
  71  func (f *FlagSet) DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {
  72  	p := new(time.Duration)
  73  	f.DurationVarP(p, name, shorthand, value, usage)
  74  	return p
  75  }
  76  
  77  // Duration defines a time.Duration flag with specified name, default value, and usage string.
  78  // The return value is the address of a time.Duration variable that stores the value of the flag.
  79  func Duration(name string, value time.Duration, usage string) *time.Duration {
  80  	return CommandLine.DurationP(name, "", value, usage)
  81  }
  82  
  83  // DurationP is like Duration, but accepts a shorthand letter that can be used after a single dash.
  84  func DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {
  85  	return CommandLine.DurationP(name, shorthand, value, usage)
  86  }
  87