Simplified CLI errors
This commit is contained in:
parent
c2d1084434
commit
5fc9cc4dff
@ -8,7 +8,6 @@ import (
|
||||
|
||||
"git.akyoto.dev/cli/q/src/build"
|
||||
"git.akyoto.dev/cli/q/src/config"
|
||||
"git.akyoto.dev/cli/q/src/errors"
|
||||
)
|
||||
|
||||
// Build parses the arguments and creates a build.
|
||||
@ -46,7 +45,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
||||
i++
|
||||
|
||||
if i >= len(args) {
|
||||
return b, &errors.ExpectedCLIParameter{Parameter: "arch"}
|
||||
return b, &ExpectedParameterError{Parameter: "arch"}
|
||||
}
|
||||
|
||||
config.TargetArch = args[i]
|
||||
@ -55,7 +54,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
||||
i++
|
||||
|
||||
if i >= len(args) {
|
||||
return b, &errors.ExpectedCLIParameter{Parameter: "os"}
|
||||
return b, &ExpectedParameterError{Parameter: "os"}
|
||||
}
|
||||
|
||||
switch args[i] {
|
||||
@ -66,12 +65,12 @@ func buildExecutable(args []string) (*build.Build, error) {
|
||||
case "windows":
|
||||
config.TargetOS = config.Windows
|
||||
default:
|
||||
return b, &errors.InvalidParameterValue{Value: args[i], Parameter: "os"}
|
||||
return b, &InvalidValueError{Value: args[i], Parameter: "os"}
|
||||
}
|
||||
|
||||
default:
|
||||
if strings.HasPrefix(args[i], "-") {
|
||||
return b, &errors.UnknownCLIParameter{Parameter: args[i]}
|
||||
return b, &UnknownParameterError{Parameter: args[i]}
|
||||
}
|
||||
|
||||
b.Files = append(b.Files, args[i])
|
||||
@ -79,7 +78,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
||||
}
|
||||
|
||||
if config.TargetOS == config.Unknown {
|
||||
return b, &errors.InvalidParameterValue{Value: runtime.GOOS, Parameter: "os"}
|
||||
return b, &InvalidValueError{Value: runtime.GOOS, Parameter: "os"}
|
||||
}
|
||||
|
||||
if len(b.Files) == 0 {
|
||||
|
34
src/cli/errors.go
Normal file
34
src/cli/errors.go
Normal file
@ -0,0 +1,34 @@
|
||||
package cli
|
||||
|
||||
import "fmt"
|
||||
|
||||
// ExpectedParameterError is created when a command line parameter is missing.
|
||||
type ExpectedParameterError struct {
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// UnknownParameterError is created when a command line parameter is not recognized.
|
||||
type UnknownParameterError struct {
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// InvalidValueError is created when a parameter has an invalid value.
|
||||
type InvalidValueError struct {
|
||||
Value string
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *ExpectedParameterError) Error() string {
|
||||
return fmt.Sprintf("Expected parameter '%s'", err.Parameter)
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *UnknownParameterError) Error() string {
|
||||
return fmt.Sprintf("Unknown parameter '%s'", err.Parameter)
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *InvalidValueError) Error() string {
|
||||
return fmt.Sprintf("Invalid value '%s' for parameter '%s'", err.Value, err.Parameter)
|
||||
}
|
@ -3,23 +3,22 @@ package cli
|
||||
import (
|
||||
"errors"
|
||||
"os/exec"
|
||||
|
||||
xerrors "git.akyoto.dev/cli/q/src/errors"
|
||||
)
|
||||
|
||||
// exit returns the exit code depending on the error type.
|
||||
func exit(err error) int {
|
||||
var (
|
||||
exit *exec.ExitError
|
||||
expectedParameter *xerrors.ExpectedCLIParameter
|
||||
unknownParameter *xerrors.UnknownCLIParameter
|
||||
expectedParameter *ExpectedParameterError
|
||||
unknownParameter *UnknownParameterError
|
||||
invalidValue *InvalidValueError
|
||||
)
|
||||
|
||||
if errors.As(err, &exit) {
|
||||
return exit.ExitCode()
|
||||
}
|
||||
|
||||
if errors.As(err, &expectedParameter) || errors.As(err, &unknownParameter) {
|
||||
if errors.As(err, &expectedParameter) || errors.As(err, &unknownParameter) || errors.As(err, &invalidValue) {
|
||||
return 2
|
||||
}
|
||||
|
||||
|
@ -1,13 +0,0 @@
|
||||
package errors
|
||||
|
||||
import "fmt"
|
||||
|
||||
// ExpectedCLIParameter error is created when a command line parameter is missing.
|
||||
type ExpectedCLIParameter struct {
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *ExpectedCLIParameter) Error() string {
|
||||
return fmt.Sprintf("Expected parameter '%s'", err.Parameter)
|
||||
}
|
@ -1,14 +0,0 @@
|
||||
package errors
|
||||
|
||||
import "fmt"
|
||||
|
||||
// InvalidParameterValue error is created when a parameter has an invalid value.
|
||||
type InvalidParameterValue struct {
|
||||
Value string
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *InvalidParameterValue) Error() string {
|
||||
return fmt.Sprintf("Invalid value '%s' for parameter '%s'", err.Value, err.Parameter)
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package errors
|
||||
|
||||
import "fmt"
|
||||
|
||||
// UnknownCLIParameter error is created when a command line parameter is not recognized.
|
||||
type UnknownCLIParameter struct {
|
||||
Parameter string
|
||||
}
|
||||
|
||||
// Error generates the string representation.
|
||||
func (err *UnknownCLIParameter) Error() string {
|
||||
return fmt.Sprintf("Unknown parameter '%s'", err.Parameter)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user