55 lines
945 B
Go
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
|
|
}
|