Add Cobra-backed command parsing

This commit is contained in:
2026-10-07 13:27:00 +00:00
parent 82128463cd
commit f206c531f1
7 changed files with 500 additions and 4 deletions

View File

@@ -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 {