cli/arg-string-array.go
2025-12-11 07:57:48 +01:00

50 lines
1.3 KiB
Go

package cli
// -------------- argStringArray ----------------
type argStringArray struct {
base argBase
targetVar *[]string
}
func (arg *argStringArray) getBase() *argBase {
return &arg.base
}
func (spec *argStringArray) parse(cli *CliParser, specIndex int, args []string, argIndex int) (consumedArgs int, err error) {
consumedArgs = 1
if spec.targetVar != nil {
if argIndex < len(args) {
remainingSpecs := len(cli.argSpecs) - specIndex - 1
availableArgs := len(args) - remainingSpecs
if availableArgs > 0 {
*spec.targetVar = args[argIndex : argIndex+availableArgs]
consumedArgs = availableArgs
} else {
err = errTooFewArguments(len(cli.argSpecs))
}
} else if spec.base.required {
err = errMissingRequiredArg(spec.base.name)
}
}
return
}
func (cli *CliParser) AddStringArrayArg(name string, required bool, targetVar *[]string, description string) {
// todo: check if arg already exists
if len(cli.argSpecs) > 0 {
lastArg := cli.argSpecs[len(cli.argSpecs)-1].getBase()
if lastArg.repeat {
panic(errRepeatArgAlreadyDefined(lastArg.name))
}
}
cli.argSpecs = append(cli.argSpecs, &argStringArray{
base: argBase{
name: name,
description: description,
required: required,
repeat: true,
},
targetVar: targetVar,
})
}