feat: implemented initial login command
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package command
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/StevanFreeborn/gator/internal/state"
|
||||
)
|
||||
|
||||
type Command struct {
|
||||
Name string
|
||||
Handler CommandHandler
|
||||
}
|
||||
|
||||
type CommandHandler func(s *state.State) error
|
||||
|
||||
func newCommand(name string, handler CommandHandler) *Command {
|
||||
return &Command{
|
||||
Name: name,
|
||||
Handler: handler,
|
||||
}
|
||||
}
|
||||
|
||||
type CommandRegistry struct {
|
||||
commands map[string]*Command
|
||||
}
|
||||
|
||||
func (c *CommandRegistry) register(cmd *Command) error {
|
||||
c.commands[cmd.Name] = cmd
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewRegistry() *CommandRegistry {
|
||||
cr := CommandRegistry{
|
||||
commands: map[string]*Command{},
|
||||
}
|
||||
|
||||
commands := []*Command{
|
||||
loginCommand(),
|
||||
}
|
||||
|
||||
for _, cmd := range commands {
|
||||
cr.register(cmd)
|
||||
}
|
||||
|
||||
return &cr
|
||||
}
|
||||
|
||||
func (c *CommandRegistry) RunCommand(cmdName string, s *state.State) error {
|
||||
cmd, found := c.commands[cmdName]
|
||||
|
||||
if !found {
|
||||
return fmt.Errorf("No '%s' registered", cmdName)
|
||||
}
|
||||
|
||||
return cmd.Handler(s)
|
||||
}
|
||||
|
||||
func loginCommand() *Command {
|
||||
return newCommand("login", func(s *state.State) error {
|
||||
if len(s.Arguments) == 0 {
|
||||
return fmt.Errorf("Did not receive expected username argument")
|
||||
}
|
||||
|
||||
username := s.Arguments[0]
|
||||
|
||||
err := s.Config.SetUser(username)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("Current user set to '%s'\n", username)
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user