LastMUD/internal/command/registry.go

63 lines
1.3 KiB
Go
Raw Normal View History

2025-06-19 16:22:55 +03:00
package command
2025-06-18 17:04:06 +03:00
2025-06-22 22:27:56 +03:00
import (
"code.haedhutner.dev/mvv/LastMUD/internal/logging"
)
2025-06-18 17:04:06 +03:00
type TokenMatcher func(tokens []Token) bool
type ParameterParser func(tokens []Token) []Parameter
type CommandWork func(parameters ...Parameter) (err error)
type CommandDefinition struct {
name string
tokenMatcher TokenMatcher
parameterParser ParameterParser
}
func CreateCommandDefinition(
name string,
tokenMatcher TokenMatcher,
parameterParser ParameterParser,
) CommandDefinition {
return CommandDefinition{
name: name,
tokenMatcher: tokenMatcher,
parameterParser: parameterParser,
}
}
func (def CommandDefinition) Name() string {
return def.name
}
func (def CommandDefinition) Match(tokens []Token) bool {
return def.tokenMatcher(tokens)
}
func (def CommandDefinition) ParseParameters(tokens []Token) []Parameter {
return def.parameterParser(tokens)
}
type CommandRegistry struct {
commandDefinitions []CommandDefinition
}
func CreateCommandRegistry(commandDefinitions ...CommandDefinition) *CommandRegistry {
return &CommandRegistry{
commandDefinitions: commandDefinitions,
}
}
func (comReg *CommandRegistry) Match(tokens []Token) (comDef *CommandDefinition) {
for _, v := range comReg.commandDefinitions {
if v.Match(tokens) {
2025-06-22 22:59:46 +03:00
logging.Debug("Found match ", v.Name())
2025-06-18 17:04:06 +03:00
return &v
}
}
return
}