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