Files

55 lines
945 B
Go

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
}