Refactor CLI exit code and error handling
This commit is contained in:
parent
5cc5be7846
commit
e024b45e0a
@ -8,6 +8,11 @@ import (
|
|||||||
lifx "git.kill0.net/chill9/lume"
|
lifx "git.kill0.net/chill9/lume"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ExitSuccess = iota
|
||||||
|
ExitError
|
||||||
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AccessToken string `toml:"access_token"`
|
AccessToken string `toml:"access_token"`
|
||||||
Colors map[string][]float32 `toml:"colors"`
|
Colors map[string][]float32 `toml:"colors"`
|
||||||
|
@ -25,8 +25,8 @@ func HelpCmd(args CmdArgs) (int, error) {
|
|||||||
} else if len(argv) >= 1 {
|
} else if len(argv) >= 1 {
|
||||||
subCmd, ok := commandRegistry[argv[0]]
|
subCmd, ok := commandRegistry[argv[0]]
|
||||||
if !ok {
|
if !ok {
|
||||||
fmt.Printf("unknown command: %s\n", argv[0])
|
fmt.Printf("unknown commnnd: %s\n", argv[0])
|
||||||
return 1, nil
|
return ExitError, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if subCmd.Use != "" {
|
if subCmd.Use != "" {
|
||||||
@ -38,7 +38,7 @@ func HelpCmd(args CmdArgs) (int, error) {
|
|||||||
subCmd.Flags.PrintDefaults()
|
subCmd.Flags.PrintDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func printHelp(commands map[string]Command) {
|
func printHelp(commands map[string]Command) {
|
||||||
|
@ -23,8 +23,8 @@ func LsCmd(args CmdArgs) (int, error) {
|
|||||||
selector := args.Flags.String("selector")
|
selector := args.Flags.String("selector")
|
||||||
lights, err := c.ListLights(selector)
|
lights, err := c.ListLights(selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
PrintLights(lights)
|
PrintLights(lights)
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
lumecmd "git.kill0.net/chill9/lume/cmd"
|
lumecmd "git.kill0.net/chill9/lume/cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
os.Exit(lumecmd.Main(os.Args))
|
exitCode, err := lumecmd.Main(os.Args)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "%s\n", err)
|
||||||
|
}
|
||||||
|
os.Exit(exitCode)
|
||||||
}
|
}
|
||||||
|
26
cmd/main.go
26
cmd/main.go
@ -1,6 +1,7 @@
|
|||||||
package lumecmd
|
package lumecmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
@ -12,19 +13,19 @@ import (
|
|||||||
|
|
||||||
const lumercFile string = ".lumerc"
|
const lumercFile string = ".lumerc"
|
||||||
|
|
||||||
func Main(args []string) int {
|
func Main(args []string) (int, error) {
|
||||||
var config Config
|
var config Config
|
||||||
|
var err error
|
||||||
|
|
||||||
configPath := getConfigPath()
|
configPath := getConfigPath()
|
||||||
if configPath == "" {
|
if configPath == "" {
|
||||||
fmt.Println("fatal: ~/.lumerc was not found")
|
err = errors.New("fatal: ~/.lumerc was not found")
|
||||||
return 1
|
return ExitError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := toml.DecodeFile(configPath, &config); err != nil {
|
if _, err := toml.DecodeFile(configPath, &config); err != nil {
|
||||||
fmt.Printf("fatal: failed to parse %s\n", configPath)
|
err = fmt.Errorf("fatal: failed to parse %s", configPath)
|
||||||
fmt.Println(err)
|
return ExitError, err
|
||||||
return 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
envAccessToken := os.Getenv("LIFX_ACCESS_TOKEN")
|
envAccessToken := os.Getenv("LIFX_ACCESS_TOKEN")
|
||||||
@ -33,8 +34,8 @@ func Main(args []string) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.AccessToken == "" {
|
if config.AccessToken == "" {
|
||||||
fmt.Println("access token is not set")
|
err = errors.New("fatal: access token is not set")
|
||||||
return 1
|
return ExitError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
@ -50,8 +51,8 @@ func Main(args []string) int {
|
|||||||
|
|
||||||
cmd, ok := GetCommand(command)
|
cmd, ok := GetCommand(command)
|
||||||
if !ok {
|
if !ok {
|
||||||
fmt.Printf("lume: '%s' is not lume command. See 'lume help'\n", command)
|
err = fmt.Errorf("lume: '%s' is not lume command. See 'lume help'", command)
|
||||||
return 1
|
return ExitError, err
|
||||||
}
|
}
|
||||||
fs := cmd.Flags
|
fs := cmd.Flags
|
||||||
fs.Parse(args[2:])
|
fs.Parse(args[2:])
|
||||||
@ -59,9 +60,10 @@ func Main(args []string) int {
|
|||||||
cmdArgs.Flags = Flags{FlagSet: fs}
|
cmdArgs.Flags = Flags{FlagSet: fs}
|
||||||
exitCode, err := cmd.Func(cmdArgs)
|
exitCode, err := cmd.Func(cmdArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "fatal: %s\n", err)
|
err = fmt.Errorf("fatal: %s", err)
|
||||||
}
|
}
|
||||||
return exitCode
|
|
||||||
|
return exitCode, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func getConfigPath() string {
|
func getConfigPath() string {
|
||||||
|
@ -33,8 +33,8 @@ func PoweroffCmd(args CmdArgs) (int, error) {
|
|||||||
|
|
||||||
r, err := c.SetState(selector, state)
|
r, err := c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,8 @@ func PoweronCmd(args CmdArgs) (int, error) {
|
|||||||
|
|
||||||
r, err := c.SetState(selector, state)
|
r, err := c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -81,17 +81,17 @@ func SetColorCmd(args CmdArgs) (int, error) {
|
|||||||
} else if rgbFlag != "" {
|
} else if rgbFlag != "" {
|
||||||
color, err := parseRGB(rgbFlag)
|
color, err := parseRGB(rgbFlag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
state.Color = color
|
state.Color = color
|
||||||
} else if name != "" {
|
} else if name != "" {
|
||||||
hsb, ok := args.Config.Colors[name]
|
hsb, ok := args.Config.Colors[name]
|
||||||
if !ok {
|
if !ok {
|
||||||
return 1, fmt.Errorf("%s is not a defined color", name)
|
return ExitError, fmt.Errorf("%s is not a defined color", name)
|
||||||
}
|
}
|
||||||
color, err := lifx.NewHSBColor(hsb[0], hsb[1], hsb[2])
|
color, err := lifx.NewHSBColor(hsb[0], hsb[1], hsb[2])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
state.Color = color
|
state.Color = color
|
||||||
}
|
}
|
||||||
@ -111,12 +111,12 @@ func SetColorCmd(args CmdArgs) (int, error) {
|
|||||||
r, err := c.SetState(selector, state)
|
r, err := c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Printf("fatal: %s\n", err)
|
fmt.Printf("fatal: %s\n", err)
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fast {
|
if !fast {
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -75,12 +75,12 @@ func SetStateCmd(args CmdArgs) (int, error) {
|
|||||||
|
|
||||||
r, err := c.SetState(selector, state)
|
r, err := c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fast {
|
if !fast {
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ func SetWhiteCmd(args CmdArgs) (int, error) {
|
|||||||
kelvin := args.Flags.Int16("kelvin")
|
kelvin := args.Flags.Int16("kelvin")
|
||||||
color, err := lifx.NewWhite(kelvin)
|
color, err := lifx.NewWhite(kelvin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
state.Color = color
|
state.Color = color
|
||||||
}
|
}
|
||||||
@ -68,7 +68,7 @@ func SetWhiteCmd(args CmdArgs) (int, error) {
|
|||||||
name := args.Flags.String("name")
|
name := args.Flags.String("name")
|
||||||
color, err := lifx.NewWhiteString(name)
|
color, err := lifx.NewWhiteString(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
state.Color = color
|
state.Color = color
|
||||||
}
|
}
|
||||||
@ -93,12 +93,12 @@ func SetWhiteCmd(args CmdArgs) (int, error) {
|
|||||||
|
|
||||||
r, err := c.SetState(selector, state)
|
r, err := c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !fast {
|
if !fast {
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,8 @@ func ToggleCmd(args CmdArgs) (int, error) {
|
|||||||
selector := args.Flags.String("selector")
|
selector := args.Flags.String("selector")
|
||||||
r, err := c.Toggle(selector, duration)
|
r, err := c.Toggle(selector, duration)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 1, err
|
return ExitError, err
|
||||||
}
|
}
|
||||||
PrintResults(r.Results)
|
PrintResults(r.Results)
|
||||||
return 0, nil
|
return ExitSuccess, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user