JCC-CSScheduler/client/internal/cmdline/cmdline.go

46 lines
945 B
Go

package cmdline
import (
"fmt"
"os"
"gitlink.org.cn/cloudream/common/pkgs/cmdtrie"
"gitlink.org.cn/cloudream/scheduler/client/internal/services"
)
type CommandContext struct {
Cmdline *Commandline
}
var commands = cmdtrie.NewCommandTrie[CommandContext, error]()
type Commandline struct {
Svc *services.Service
}
func NewCommandline(svc *services.Service) (*Commandline, error) {
return &Commandline{
Svc: svc,
}, nil
}
func (c *Commandline) DispatchCommand(allArgs []string) {
cmdCtx := CommandContext{
Cmdline: c,
}
cmdErr, err := commands.Execute(cmdCtx, allArgs, cmdtrie.ExecuteOption{ReplaceEmptyArrayWithNil: true})
if err != nil {
fmt.Printf("execute command failed, err: %s", err.Error())
os.Exit(1)
}
if cmdErr != nil {
fmt.Printf("execute command failed, err: %s", cmdErr.Error())
os.Exit(1)
}
}
func MustAddCmd(fn any, prefixWords ...string) any {
commands.MustAdd(fn, prefixWords...)
return nil
}