-
Notifications
You must be signed in to change notification settings - Fork 0
/
flagsets.go
80 lines (68 loc) · 1.38 KB
/
flagsets.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package readline
import (
"github.com/spf13/pflag"
)
type FlagSets struct {
sets map[string]*FlagSet
}
func NewFlagSets() *FlagSets {
return &FlagSets{
sets: map[string]*FlagSet{},
}
}
func (s *FlagSets) Default() *FlagSet {
return s.Get("default")
}
func (s *FlagSets) Internal() *FlagSet {
return s.Get("internal")
}
func (s *FlagSets) Get(name string) *FlagSet {
if _, ok := s.sets[name]; !ok {
s.sets[name] = NewFlagSet(name)
}
return s.sets[name]
}
func (s *FlagSets) Parse(arguments []string) error {
for _, set := range s.sets {
if err := set.Parse(arguments); err != nil {
return err
}
}
return nil
}
func (s *FlagSets) All() *FlagSet {
fs := NewFlagSet("all")
for _, set := range s.sets {
fs.AddFlagSet(set.FlagSet)
}
return fs
}
func (s *FlagSets) Visit(fn func(*pflag.Flag)) Flags {
var ret Flags
for _, set := range s.sets {
set.Visit(fn)
}
return ret
}
func (s *FlagSets) VisitAll(fn func(*pflag.Flag)) Flags {
var ret Flags
for _, set := range s.sets {
set.VisitAll(fn)
}
return ret
}
func (s *FlagSets) Visited() Flags {
var ret Flags
for _, set := range s.sets {
ret = append(ret, set.Visited()...)
}
return ret
}
func (s *FlagSets) ParseAll(arguments []string, fn func(flag *pflag.Flag, value string) error) error {
for _, group := range s.sets {
if err := group.ParseAll(arguments, fn); err != nil {
return err
}
}
return nil
}