package cli import ( "fmt" "io" ) type Handlers struct { PrintUsage func(io.Writer) RunServer func([]string) error RunAPI func([]string) error } func (h Handlers) printUsage(w io.Writer) { if h.PrintUsage != nil { h.PrintUsage(w) } } // Run executes the inbox CLI and returns a process exit code. func Run(args []string, stderr io.Writer, handlers Handlers) int { if len(args) < 2 { handlers.printUsage(stderr) return 1 } cmd := args[1] var err error switch cmd { case "server": if handlers.RunServer == nil { err = fmt.Errorf("cli %s handler is not configured", cmd) break } err = handlers.RunServer(args[2:]) case "api": if handlers.RunAPI == nil { err = fmt.Errorf("cli %s handler is not configured", cmd) break } err = handlers.RunAPI(args[2:]) default: handlers.printUsage(stderr) return 1 } if err != nil { fmt.Fprintf(stderr, "error: %v\n", err) return 1 } return 0 }