1package pflag
2
3import (
4	"time"
5)
6
7// -- time.Duration Value
8type durationValue time.Duration
9
10func newDurationValue(val time.Duration, p *time.Duration) *durationValue {
11	*p = val
12	return (*durationValue)(p)
13}
14
15func (d *durationValue) Set(s string) error {
16	v, err := time.ParseDuration(s)
17	*d = durationValue(v)
18	return err
19}
20
21func (d *durationValue) Type() string {
22	return "duration"
23}
24
25func (d *durationValue) String() string { return (*time.Duration)(d).String() }
26
27func 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
32func (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.
42func (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.
47func (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.
53func 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.
58func 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.
64func (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.
71func (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.
79func 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.
84func DurationP(name, shorthand string, value time.Duration, usage string) *time.Duration {
85	return CommandLine.DurationP(name, shorthand, value, usage)
86}
87