forked from vitessio/vitess
-
Notifications
You must be signed in to change notification settings - Fork 8
/
flag.go
61 lines (49 loc) · 1.93 KB
/
flag.go
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
package topoproto
import (
"flag"
"strings"
topodatapb "vitess.io/vitess/go/vt/proto/topodata"
)
// TabletTypeListVar defines a []TabletType flag with the specified name and usage
// string. The argument 'p' points to a []TabletType in which to store the value of the flag.
func TabletTypeListVar(p *[]topodatapb.TabletType, name string, usage string) {
flag.Var((*TabletTypeListValue)(p), name, usage)
}
// TabletTypeVar defines a TabletType flag with the specified name, default value and usage
// string. The argument 'p' points to a tabletType in which to store the value of the flag.
func TabletTypeVar(p *topodatapb.TabletType, name string, defaultValue topodatapb.TabletType, usage string) {
*p = defaultValue
flag.Var((*TabletTypeFlag)(p), name, usage)
}
// TabletTypeListValue implements the flag.Value interface, for parsing a command-line comma-separated
// list of value into a slice of TabletTypes.
type TabletTypeListValue []topodatapb.TabletType
// String is part of the flag.Value interface.
func (ttlv *TabletTypeListValue) String() string {
return strings.Join(MakeStringTypeList(*ttlv), ",")
}
// Set is part of the flag.Value interface.
func (ttlv *TabletTypeListValue) Set(v string) (err error) {
*ttlv, err = ParseTabletTypes(v)
return err
}
// Get is for satisflying the internal flag interface.
func (ttlv *TabletTypeListValue) Get() interface{} {
return *ttlv
}
// TabletTypeFlag implements the flag.Value interface, for parsing a command-line value into a TabletType.
type TabletTypeFlag topodatapb.TabletType
// String is part of the flag.Value interface.
func (ttf *TabletTypeFlag) String() string {
return topodatapb.TabletType(*ttf).String()
}
// Set is part of the flag.Value interface.
func (ttf *TabletTypeFlag) Set(v string) error {
t, err := ParseTabletType(v)
*ttf = TabletTypeFlag(t)
return err
}
// Get is for satisflying the internal flag interface.
func (ttf *TabletTypeFlag) Get() interface{} {
return *ttf
}