flagtype
Common flag types for slices, enums, maps, URLs, and regular expressions.
import "github.com/pressly/cli/flagtype"
At a glance
Each name links to godoc.
FUNCTIONS
func StringSlice() flag.Value
func Enum(allowed ...string) flag.Value
func EnumDefault(defaultVal string, allowed []string) flag.Value
func StringMap() flag.Value
func URL() flag.Value
func Regexp() flag.Value
Patterns
A command using every type:
cmd := &cli.Command{
Name: "fetch",
Flags: cli.FlagsFunc(func(f *flag.FlagSet) {
f.Var(flagtype.StringSlice(),
"tag", "add a tag (repeatable)")
f.Var(flagtype.Enum("json", "yaml", "table"),
"format", "output format")
f.Var(flagtype.EnumDefault("sql", []string{"sql", "go"}),
"type", "migration type")
f.Var(flagtype.StringMap(),
"label", "key=value (repeatable)")
f.Var(flagtype.URL(),
"endpoint", "API endpoint")
f.Var(flagtype.Regexp(),
"match", "filter pattern")
}),
Exec: func(ctx context.Context, state *cli.State) error {
// Values come back as their Go types.
tags := state.GetFlag[[]string]("tag")
format := state.GetFlag[string]("format")
migType := state.GetFlag[string]("type")
labels := state.GetFlag[map[string]string]("label")
endpoint := state.GetFlag[*url.URL]("endpoint")
re := state.GetFlag[*regexp.Regexp]("match")
_, _, _, _, _, _ = tags, format, migType, labels, endpoint, re
return nil
},
}
$ fetch --help
Usage:
fetch [flags]
Flags:
--endpoint url API endpoint
--format enum output format
--label stringMap key=value (repeatable)
--match regexp filter pattern
--tag stringSlice add a tag (repeatable)
--type enum migration type (default: sql)
# Repeatable flags collect every value.
fetch --tag a --tag b --label env=prod --label tier=api