...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package flags
16
17 import (
18 "errors"
19 "fmt"
20 "sort"
21 "strings"
22 )
23
24
25 type SelectiveStringValue struct {
26 v string
27 valids map[string]struct{}
28 }
29
30
31
32 func (ss *SelectiveStringValue) Set(s string) error {
33 if _, ok := ss.valids[s]; ok {
34 ss.v = s
35 return nil
36 }
37 return errors.New("invalid value")
38 }
39
40
41 func (ss *SelectiveStringValue) String() string {
42 return ss.v
43 }
44
45
46 func (ss *SelectiveStringValue) Valids() []string {
47 s := make([]string, 0, len(ss.valids))
48 for k := range ss.valids {
49 s = append(s, k)
50 }
51 sort.Strings(s)
52 return s
53 }
54
55
56
57
58
59
60
61 func NewSelectiveStringValue(valids ...string) *SelectiveStringValue {
62 vm := make(map[string]struct{})
63 for _, v := range valids {
64 vm[v] = struct{}{}
65 }
66 return &SelectiveStringValue{valids: vm, v: valids[0]}
67 }
68
69
70 type SelectiveStringsValue struct {
71 vs []string
72 valids map[string]struct{}
73 }
74
75
76
77 func (ss *SelectiveStringsValue) Set(s string) error {
78 vs := strings.Split(s, ",")
79 for i := range vs {
80 if _, ok := ss.valids[vs[i]]; ok {
81 ss.vs = append(ss.vs, vs[i])
82 } else {
83 return fmt.Errorf("invalid value %q", vs[i])
84 }
85 }
86 sort.Strings(ss.vs)
87 return nil
88 }
89
90
91 func (ss *SelectiveStringsValue) String() string {
92 return strings.Join(ss.vs, ",")
93 }
94
95
96 func (ss *SelectiveStringsValue) Valids() []string {
97 s := make([]string, 0, len(ss.valids))
98 for k := range ss.valids {
99 s = append(s, k)
100 }
101 sort.Strings(s)
102 return s
103 }
104
105
106
107
108 func NewSelectiveStringsValue(valids ...string) *SelectiveStringsValue {
109 vm := make(map[string]struct{})
110 for _, v := range valids {
111 vm[v] = struct{}{}
112 }
113 return &SelectiveStringsValue{valids: vm, vs: []string{}}
114 }
115
View as plain text