diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-02-23 02:25:31 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-02-23 02:25:31 +0900 |
| commit | 89970f51970b320430852ed57dcfc9d6c841322e (patch) | |
| tree | 5119243e0a5c0f542be845fe4d621657cdf92aaa /command/flag.go | |
| parent | 35037705a90b61ac52a38f6f41ce48b071537143 (diff) | |
command/flag: implement repeatable flag
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'command/flag.go')
| -rw-r--r-- | command/flag.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/command/flag.go b/command/flag.go index 8e890a1a..cb85a648 100644 --- a/command/flag.go +++ b/command/flag.go @@ -44,6 +44,26 @@ func (v BoolFlag) Define(b *strings.Builder, set *flag.FlagSet, p any, name, usa b.WriteString(" [" + prettyFlag(name) + "]") } +// RepeatableFlag implements an ordered, repeatable string flag. +type RepeatableFlag []string + +func (r *RepeatableFlag) String() string { + if r == nil { + return "<nil>" + } + return strings.Join(*r, " ") +} + +func (r *RepeatableFlag) Set(v string) error { + *r = append(*r, v) + return nil +} + +func (r *RepeatableFlag) Define(b *strings.Builder, set *flag.FlagSet, _ any, name, usage string) { + set.Var(r, name, usage) + b.WriteString(" [" + prettyFlag(name) + " <value>]") +} + // this has no effect on parse outcome func prettyFlag(name string) string { switch len(name) { |
