LastMUD/internal/command/command.go
Miroslav Vasilev 681f153881 Move Commands
2025-06-27 14:58:52 +03:00

60 lines
1.2 KiB
Go

package command
type Command struct {
commandDefinition CommandDefinition
params []Parameter
}
func CreateCommand(cmdDef CommandDefinition, parameters []Parameter) Command {
return Command{
commandDefinition: cmdDef,
params: parameters,
}
}
func (cmd Command) Definition() CommandDefinition {
return cmd.commandDefinition
}
func (cmd Command) Parameters() []Parameter {
return cmd.params
}
type CommandContext struct {
commandString string
tokens []Token
command Command
}
func CreateCommandContext(commandRegistry *CommandRegistry, commandString string) (ctx *CommandContext, err error) {
tokenizer := CreateTokenizer()
tokens, tokenizerError := tokenizer.Tokenize(commandString)
if tokenizerError != nil {
err = tokenizerError
return
}
commandDef := commandRegistry.Match(tokens)
if commandDef == nil {
err = createCommandContextError("Unknown command")
return
}
params := commandDef.ParseParameters(tokens)
ctx = &CommandContext{
commandString: commandString,
tokens: tokens,
command: CreateCommand(*commandDef, params),
}
return
}
func (ctx *CommandContext) Command() Command {
return ctx.command
}