gob/shell/command/flag/arg.go

80 lines
1.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package flag
import (
"fmt"
. "gitea.zaclys.com/bvaudour/gob/option"
)
// Arg représente un argument de commande
type Arg struct {
name string
usage string
value *[]string
nb int
}
// Parse parse largument à partir de lentrée fournie
// et retourne les éléments restant à parser.
// Si le parsage échoue, une erreur est retournée.
func (a *Arg) Parse(args []string) (next Result[[]string]) {
l := len(args)
switch a.nb {
case -1:
*a.value = make([]string, l)
copy(*a.value, args)
case 0:
if l > 0 {
next, *a.value = Ok(args[1:]), []string{args[0]}
}
default:
if l < a.nb {
next = Err[[]string](fmt.Errorf("Not enough args for %s", a.name))
} else {
*a.value = make([]string, a.nb)
copy(*a.value, args[:a.nb])
next = Ok(args[a.nb:])
}
}
return
}
// IsParsed retourne vrai si largument a déjà été parsé.
func (a *Arg) IsParsed() bool {
return len(*a.value) > 0
}
// Reset réinitialise le parsage.
func (a *Arg) Reset() {
*a.value = []string{}
}
// Name retourne le nom de largument.
func (a *Arg) Name() string {
return a.name
}
// Usage retourne laide sur lutilisation de largument.
func (a *Arg) Usage() string {
return a.usage
}
// NewArg retourne un nouvel argument avec son nom, sa description
// le nombre déléments attendu et un pointeur vers la valeur parsée.
//
// Si nbargs < 0, largument peut recevoir un nombre déléments indéterminé.
// Si nbargs = 0, largument est facultatif.
func NewArg(name, usage string, nbargs int, value *[]string) *Arg {
if nbargs < 0 {
nbargs = -1
}
return &Arg{
name: name,
usage: usage,
value: value,
nb: nbargs,
}
}