-
Notifications
You must be signed in to change notification settings - Fork 60
/
register.go
55 lines (48 loc) · 1.35 KB
/
register.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
package flagext
import (
"flag"
"github.com/go-kit/log"
)
// Registerer is a thing that can RegisterFlags
type Registerer interface {
RegisterFlags(*flag.FlagSet)
}
// RegistererWithLogger is a thing that can RegisterFlags with a Logger
type RegistererWithLogger interface {
RegisterFlags(*flag.FlagSet, log.Logger)
}
// RegisterFlags registers flags with the provided Registerers
func RegisterFlags(rs ...Registerer) {
for _, r := range rs {
r.RegisterFlags(flag.CommandLine)
}
}
// RegisterFlagsWithLogger registers flags with the provided Registerers
func RegisterFlagsWithLogger(logger log.Logger, rs ...interface{}) {
for _, v := range rs {
switch r := v.(type) {
case Registerer:
r.RegisterFlags(flag.CommandLine)
case RegistererWithLogger:
r.RegisterFlags(flag.CommandLine, logger)
default:
panic("RegisterFlagsWithLogger must be passed a Registerer or RegistererWithLogger")
}
}
}
// DefaultValues initiates a set of configs (Registerers) with their defaults.
func DefaultValues(rs ...interface{}) {
fs := flag.NewFlagSet("", flag.PanicOnError)
logger := log.NewNopLogger()
for _, v := range rs {
switch r := v.(type) {
case Registerer:
r.RegisterFlags(fs)
case RegistererWithLogger:
r.RegisterFlags(fs, logger)
default:
panic("RegisterFlagsWithLogger must be passed a Registerer")
}
}
_ = fs.Parse([]string{})
}