Files
asciinema/cli/cli.go

62 lines
871 B
Go
Raw Normal View History

2014-08-02 21:59:53 +02:00
package cli
import (
"flag"
"fmt"
)
type CLI struct {
2014-11-12 20:54:50 +01:00
Commands map[string]Command
HelpFunc func()
2014-08-02 21:59:53 +02:00
}
func (c *CLI) Run(args []string) int {
commandName, args := parseArgs(args)
if commandName == "help" {
2014-08-09 23:39:23 +02:00
c.HelpFunc()
return 0
}
2014-11-12 20:54:50 +01:00
command := c.Commands[commandName]
if command == nil {
2014-08-09 23:39:23 +02:00
c.HelpFunc()
2014-08-02 21:59:53 +02:00
return 1
}
flags := flag.NewFlagSet(commandName, flag.ExitOnError)
2014-11-12 20:54:50 +01:00
command.RegisterFlags(flags)
2014-08-02 21:59:53 +02:00
flags.Parse(args)
2014-11-12 20:54:50 +01:00
err := command.Execute(flags.Args())
2014-08-02 21:59:53 +02:00
if err != nil {
2014-11-13 18:18:26 +01:00
fmt.Printf("Error: %v\n", err)
2014-08-02 21:59:53 +02:00
return 2
}
return 0
}
func parseArgs(args []string) (string, []string) {
command := ""
for _, arg := range args {
if arg == "-v" || arg == "--version" {
args = []string{"version"}
break
}
}
if len(args) > 0 {
command = args[0]
args = args[1:]
if command == "-h" {
command = "help"
}
}
return command, args
}