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
|
|||
|
|
}
|