Add Cobra-backed command parsing
This commit is contained in:
20
command.go
20
command.go
@@ -4,6 +4,8 @@ import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"unicode"
|
||||
|
||||
internalcobra "gitea.maximumdirect.net/eric/CommandKit/internal/cobra"
|
||||
)
|
||||
|
||||
// Command is an opaque command declaration. Use NewCommand or Group to create
|
||||
@@ -95,6 +97,7 @@ type CommandSpec[I any] struct {
|
||||
type commandPayload interface {
|
||||
validate() error
|
||||
hasRun() bool
|
||||
bridgeFlags() []internalcobra.Flag
|
||||
prepare([][]string, []string, bool) (func() any, error)
|
||||
run(Invocation, any) Outcome
|
||||
}
|
||||
@@ -111,6 +114,23 @@ func (c typedCommand[I]) hasRun() bool {
|
||||
return c.spec.Run != nil
|
||||
}
|
||||
|
||||
func (c typedCommand[I]) bridgeFlags() []internalcobra.Flag {
|
||||
flags := make([]internalcobra.Flag, len(c.spec.Flags))
|
||||
for index, flag := range c.spec.Flags {
|
||||
binding := flag.binding
|
||||
flags[index] = internalcobra.Flag{
|
||||
Name: binding.meta.Name,
|
||||
Short: binding.meta.Short,
|
||||
Usage: binding.meta.Usage,
|
||||
Default: binding.defaultText,
|
||||
Boolean: binding.boolean,
|
||||
Repeated: binding.repeated,
|
||||
Required: binding.meta.Required,
|
||||
}
|
||||
}
|
||||
return flags
|
||||
}
|
||||
|
||||
func (c typedCommand[I]) prepare(flagValues [][]string, operands []string, enforceRequired bool) (func() any, error) {
|
||||
prepared, err := prepareInput(c.spec, flagValues, operands, enforceRequired)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user