feat: add help and exit commands
This commit is contained in:
+75
@@ -0,0 +1,75 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type context struct {
|
||||
commands map[string]cliCommand
|
||||
}
|
||||
|
||||
func (r *context) register(c cliCommand) {
|
||||
if c.name != "" {
|
||||
r.commands[c.name] = c
|
||||
}
|
||||
}
|
||||
|
||||
func NewContext() *context {
|
||||
var exitCommand = cliCommand{
|
||||
name: "exit",
|
||||
description: "Exit the Pokedex",
|
||||
callback: commandExit,
|
||||
}
|
||||
|
||||
var helpCommand = cliCommand{
|
||||
name: "help",
|
||||
description: "Displays a help message",
|
||||
callback: commandHelp,
|
||||
}
|
||||
|
||||
c := &context{
|
||||
commands: map[string]cliCommand{},
|
||||
}
|
||||
|
||||
c.register(exitCommand)
|
||||
c.register(helpCommand)
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
type commandFunc func(c *context) error
|
||||
|
||||
type cliCommand struct {
|
||||
name string
|
||||
description string
|
||||
callback commandFunc
|
||||
}
|
||||
|
||||
func commandExit(c *context) error {
|
||||
fmt.Println("Closing the Pokedex... Goodbye!")
|
||||
os.Exit(0)
|
||||
return nil
|
||||
}
|
||||
|
||||
func commandHelp(c *context) error {
|
||||
fmt.Println("Welcome to the Pokedex!")
|
||||
fmt.Println("Usage:")
|
||||
fmt.Println("")
|
||||
|
||||
sortedKeys := []string{}
|
||||
|
||||
for k := range c.commands {
|
||||
sortedKeys = append(sortedKeys, k)
|
||||
}
|
||||
|
||||
sort.Strings(sortedKeys)
|
||||
|
||||
for _, key := range sortedKeys {
|
||||
command := c.commands[key]
|
||||
fmt.Printf("%s: %s\n", command.name, command.description)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user