-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathflags.go
62 lines (55 loc) · 1.2 KB
/
flags.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
62
package pogo
import "strings"
// Flags is an wrapper of strings slice with handle methods
type Flags []string
// String implements fmt.Stringer
func (flags Flags) String() string {
return strings.Join(flags, ", ")
}
// Parse text to set of flags
//
// Removes empty and duplicates
func (flags *Flags) Parse(text string) {
tags := strings.Split(text, ",")
res := make(Flags, 0, len(tags))
exists := make(map[string]bool, len(tags))
for i := range tags {
tag := strings.TrimSpace(tags[i])
if tag != "" && !exists[tag] {
res = append(res, tag)
exists[tag] = true
}
}
*flags = res
}
// Contain the flag?
func (flags Flags) Contain(flag string) bool {
for i := range flags {
if flags[i] == flag {
return true
}
}
return false
}
// Add the flag
//
// Returns false if flags has already contain the flag.
func (flags *Flags) Add(flag string) bool {
if flags.Contain(flag) {
return false
}
*flags = append(*flags, flag)
return true
}
// Remove the flag
//
// Returns false if flags hasn't contain the flag.
func (flags *Flags) Remove(flag string) bool {
for i := range *flags {
if (*flags)[i] == flag {
*flags = append((*flags)[:i], (*flags)[i+1:]...)
return true
}
}
return false
}