...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package flag
18
19 import (
20 stdflag "flag"
21 "fmt"
22 "strings"
23 )
24
25
26 type MultiFlag struct {
27 IsSet *bool
28 Values *[]string
29 }
30
31 var _ stdflag.Value = (*MultiFlag)(nil)
32
33 func (m *MultiFlag) Set(v string) error {
34 if m.IsSet != nil && !*m.IsSet {
35 *m.IsSet = true
36 *m.Values = nil
37 }
38 *m.Values = append(*m.Values, v)
39 return nil
40 }
41
42 func (m *MultiFlag) String() string {
43 if m == nil || m.Values == nil {
44 return ""
45 }
46 return strings.Join(*m.Values, ",")
47 }
48
49
50 type ExplicitFlag struct {
51 IsSet *bool
52 Value *string
53 }
54
55 var _ stdflag.Value = (*ExplicitFlag)(nil)
56
57 func (f *ExplicitFlag) Set(value string) error {
58 *f.IsSet = true
59 *f.Value = value
60 return nil
61 }
62
63 func (f *ExplicitFlag) String() string {
64 if f == nil || f.Value == nil {
65 return ""
66 }
67 return *f.Value
68 }
69
70 var _ stdflag.Value = (*AllowedStringFlag)(nil)
71
72 type AllowedStringFlag struct {
73 Allowed []string
74 Value *string
75 }
76
77 func (f *AllowedStringFlag) Set(v string) error {
78 for _, a := range f.Allowed {
79 if v == a {
80 *f.Value = v
81 return nil
82 }
83 }
84 return fmt.Errorf("Invalid argument %q. Possible values are: %s", v, strings.Join(f.Allowed, ", "))
85 }
86
87 func (f *AllowedStringFlag) String() string {
88 if f == nil || f.Value == nil {
89 return ""
90 }
91 return *f.Value
92 }
93
View as plain text