-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvalue.go
More file actions
87 lines (68 loc) · 1.82 KB
/
Copy pathvalue.go
File metadata and controls
87 lines (68 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package pennant
import "strconv"
// Value is the interface to the dynamic value stored in a flag.
// Compatible with pflag.Value and flag.Value.
type Value interface {
String() string
Set(string) error
Type() string
}
// SliceValue is an optional interface for slice-type flag values.
type SliceValue interface {
Value
Append(string) error
Replace([]string) error
GetSlice() []string
}
// boolFlag is an optional interface for boolean-like flag values.
// If a Value implements this and IsBoolFlag returns true, the flag
// can be used without an explicit value (--flag means --flag=true).
type boolFlag interface {
Value
IsBoolFlag() bool
}
// -- string Value
type stringValue string
func newStringValue(val string, p *string) *stringValue {
*p = val
return (*stringValue)(p)
}
func (s *stringValue) Set(val string) error {
*s = stringValue(val)
return nil
}
func (s *stringValue) String() string { return string(*s) }
func (s *stringValue) Type() string { return "string" }
// -- bool Value
type boolValue bool
func newBoolValue(val bool, p *bool) *boolValue {
*p = val
return (*boolValue)(p)
}
func (b *boolValue) Set(val string) error {
v, err := strconv.ParseBool(val)
if err != nil {
return err
}
*b = boolValue(v)
return nil
}
func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) }
func (b *boolValue) Type() string { return "bool" }
func (b *boolValue) IsBoolFlag() bool { return true }
// -- int Value
type intValue int
func newIntValue(val int, p *int) *intValue {
*p = val
return (*intValue)(p)
}
func (i *intValue) Set(val string) error {
v, err := strconv.ParseInt(val, 0, strconv.IntSize)
if err != nil {
return err
}
*i = intValue(v)
return nil
}
func (i *intValue) String() string { return strconv.Itoa(int(*i)) }
func (i *intValue) Type() string { return "int" }