49 lines
1.8 KiB
Go
49 lines
1.8 KiB
Go
// /futriis/internal/cli/commands.go
|
||
// Пакет cli определяет структуру команд и систему их регистрации в СУБД.
|
||
// Command представляет собой описание команды с именем, описанием, синтаксисом использования и функцией-обработчиком.
|
||
// CommandRegistry служит центральным реестром для всех доступных команд, позволяя регистрировать новые, получать команды по имени и формировать список для справки.
|
||
// Обеспечивает расширяемость интерфейса командной строки.
|
||
|
||
|
||
package cli
|
||
|
||
// Command представляет команду СУБД
|
||
type Command struct {
|
||
Name string
|
||
Description string
|
||
Usage string
|
||
Handler func(args []string) (string, error)
|
||
}
|
||
|
||
// CommandRegistry реестр всех доступных команд
|
||
type CommandRegistry struct {
|
||
commands map[string]*Command
|
||
}
|
||
|
||
// NewCommandRegistry создаёт новый реестр команд
|
||
func NewCommandRegistry() *CommandRegistry {
|
||
return &CommandRegistry{
|
||
commands: make(map[string]*Command),
|
||
}
|
||
}
|
||
|
||
// Register регистрирует новую команду
|
||
func (cr *CommandRegistry) Register(cmd *Command) {
|
||
cr.commands[cmd.Name] = cmd
|
||
}
|
||
|
||
// Get возвращает команду по имени
|
||
func (cr *CommandRegistry) Get(name string) (*Command, bool) {
|
||
cmd, ok := cr.commands[name]
|
||
return cmd, ok
|
||
}
|
||
|
||
// List возвращает список всех команд
|
||
func (cr *CommandRegistry) List() []*Command {
|
||
cmds := make([]*Command, 0, len(cr.commands))
|
||
for _, cmd := range cr.commands {
|
||
cmds = append(cmds, cmd)
|
||
}
|
||
return cmds
|
||
}
|