Add Cobra-backed command parsing
This commit is contained in:
41
parser.go
Normal file
41
parser.go
Normal file
@@ -0,0 +1,41 @@
|
||||
package commandkit
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
internalcobra "gitea.maximumdirect.net/eric/CommandKit/internal/cobra"
|
||||
)
|
||||
|
||||
func (a *App) parse(args []string, options internalcobra.ParseOptions) internalcobra.Result {
|
||||
if a == nil {
|
||||
return internalcobra.Result{Failure: &internalcobra.Failure{Message: "cannot parse commands on a nil app"}}
|
||||
}
|
||||
root := &internalcobra.Command{Name: a.identity.Name}
|
||||
names := make([]string, 0, len(a.commands))
|
||||
for name, node := range a.commands {
|
||||
if !node.reserved {
|
||||
names = append(names, name)
|
||||
}
|
||||
}
|
||||
sort.Strings(names)
|
||||
for _, name := range names {
|
||||
root.Children = append(root.Children, bridgeCommand(a.commands[name].command))
|
||||
}
|
||||
return internalcobra.Parse(root, args, options)
|
||||
}
|
||||
|
||||
func bridgeCommand(command Command) *internalcobra.Command {
|
||||
declaration := &internalcobra.Command{
|
||||
Name: command.name,
|
||||
Summary: command.summary,
|
||||
Description: command.description,
|
||||
}
|
||||
if command.payload != nil {
|
||||
declaration.Runnable = command.payload.hasRun()
|
||||
declaration.Flags = command.payload.bridgeFlags()
|
||||
}
|
||||
for _, child := range command.children {
|
||||
declaration.Children = append(declaration.Children, bridgeCommand(child))
|
||||
}
|
||||
return declaration
|
||||
}
|
||||
Reference in New Issue
Block a user