1package flags
2
3// These flag type implementations are provided to maintain autopilot command
4// backwards compatibility.
5
6import (
7	"fmt"
8	"strconv"
9	"time"
10)
11
12// BoolValue provides a flag value that's aware if it has been set.
13type BoolValue struct {
14	v *bool
15}
16
17// Merge will overlay this value if it has been set.
18func (b *BoolValue) Merge(onto *bool) {
19	if b.v != nil {
20		*onto = *(b.v)
21	}
22}
23
24// Set implements the flag.Value interface.
25func (b *BoolValue) Set(v string) error {
26	if b.v == nil {
27		b.v = new(bool)
28	}
29	var err error
30	*(b.v), err = strconv.ParseBool(v)
31	return err
32}
33
34// String implements the flag.Value interface.
35func (b *BoolValue) String() string {
36	var current bool
37	if b.v != nil {
38		current = *(b.v)
39	}
40	return fmt.Sprintf("%v", current)
41}
42
43// DurationValue provides a flag value that's aware if it has been set.
44type DurationValue struct {
45	v *time.Duration
46}
47
48// Merge will overlay this value if it has been set.
49func (d *DurationValue) Merge(onto *time.Duration) {
50	if d.v != nil {
51		*onto = *(d.v)
52	}
53}
54
55// Set implements the flag.Value interface.
56func (d *DurationValue) Set(v string) error {
57	if d.v == nil {
58		d.v = new(time.Duration)
59	}
60	var err error
61	*(d.v), err = time.ParseDuration(v)
62	return err
63}
64
65// String implements the flag.Value interface.
66func (d *DurationValue) String() string {
67	var current time.Duration
68	if d.v != nil {
69		current = *(d.v)
70	}
71	return current.String()
72}
73
74// UintValue provides a flag value that's aware if it has been set.
75type UintValue struct {
76	v *uint
77}
78
79// Merge will overlay this value if it has been set.
80func (u *UintValue) Merge(onto *uint) {
81	if u.v != nil {
82		*onto = *(u.v)
83	}
84}
85
86// Set implements the flag.Value interface.
87func (u *UintValue) Set(v string) error {
88	if u.v == nil {
89		u.v = new(uint)
90	}
91	parsed, err := strconv.ParseUint(v, 0, 64)
92	*(u.v) = (uint)(parsed)
93	return err
94}
95
96// String implements the flag.Value interface.
97func (u *UintValue) String() string {
98	var current uint
99	if u.v != nil {
100		current = *(u.v)
101	}
102	return fmt.Sprintf("%v", current)
103}
104