-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathparameters.go
55 lines (47 loc) · 1.51 KB
/
parameters.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 slice
import (
"os"
"text/tabwriter"
"github.com/kelseyhightower/envconfig"
)
// DefaultTableFormat constant to use to display usage in a tabular format
const DefaultTableFormat = `{{range .}}{{usage_key .}} {{usage_type .}} {{usage_default .}} {{usage_required .}} {{usage_description .}}
{{end}}`
// Parameter contains application configuration.
//
// type Parameters struct {
// Addr string `envconfig:"addr"`
// ReadTimeout time.Duration `envconfig:"read_timeout"`
// WriteTimeout time.Duration `envconfig:"write_timeout"`
// }
type Parameter interface {
}
// ParameterParser parses application parameters.
type ParameterParser interface {
// Parse parses Parameter fields.
Parse(prefix string, parameters ...Parameter) error
// Usage prints parameters usage to stdout.
Usage(prefix string, parameters ...Parameter) error
}
type stdParameterParser struct {
}
func (d stdParameterParser) Parse(prefix string, parameters ...Parameter) error {
for _, parameter := range parameters {
if err := envconfig.Process(prefix, parameter); err != nil {
return err
}
}
return nil
}
func (d stdParameterParser) Usage(prefix string, parameters ...Parameter) error {
tabs := tabwriter.NewWriter(os.Stdout, 1, 0, 4, ' ', 0)
if _, err := tabs.Write([]byte("KEY\tTYPE\tDEFAULT\tREQUIRED\tDESCRIPTION\n")); err != nil {
return err
}
for _, parameter := range parameters {
if err := envconfig.Usagef(prefix, parameter, tabs, DefaultTableFormat); err != nil {
return err
}
}
return tabs.Flush()
}