command.go 793 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package control
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type Description struct {
  7. Short string
  8. Usage []string
  9. }
  10. type Command interface {
  11. Name() string
  12. Description() Description
  13. Execute(args []string) error
  14. }
  15. var (
  16. commandRegistry = make(map[string]Command)
  17. )
  18. func RegisterCommand(cmd Command) error {
  19. entry := strings.ToLower(cmd.Name())
  20. if entry == "" {
  21. return newError("empty command name")
  22. }
  23. commandRegistry[entry] = cmd
  24. return nil
  25. }
  26. func GetCommand(name string) Command {
  27. cmd, found := commandRegistry[name]
  28. if !found {
  29. return nil
  30. }
  31. return cmd
  32. }
  33. type hiddenCommand interface {
  34. Hidden() bool
  35. }
  36. func PrintUsage() {
  37. for name, cmd := range commandRegistry {
  38. if _, ok := cmd.(hiddenCommand); ok {
  39. continue
  40. }
  41. fmt.Println(" ", name, "\t\t\t", cmd.Description())
  42. }
  43. }