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/build"
|
||||||
"git.akyoto.dev/cli/q/src/config"
|
"git.akyoto.dev/cli/q/src/config"
|
||||||
"git.akyoto.dev/cli/q/src/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Build parses the arguments and creates a build.
|
// Build parses the arguments and creates a build.
|
||||||
@ -46,7 +45,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
|||||||
i++
|
i++
|
||||||
|
|
||||||
if i >= len(args) {
|
if i >= len(args) {
|
||||||
return b, &errors.ExpectedCLIParameter{Parameter: "arch"}
|
return b, &ExpectedParameterError{Parameter: "arch"}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.TargetArch = args[i]
|
config.TargetArch = args[i]
|
||||||
@ -55,7 +54,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
|||||||
i++
|
i++
|
||||||
|
|
||||||
if i >= len(args) {
|
if i >= len(args) {
|
||||||
return b, &errors.ExpectedCLIParameter{Parameter: "os"}
|
return b, &ExpectedParameterError{Parameter: "os"}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch args[i] {
|
switch args[i] {
|
||||||
@ -66,12 +65,12 @@ func buildExecutable(args []string) (*build.Build, error) {
|
|||||||
case "windows":
|
case "windows":
|
||||||
config.TargetOS = config.Windows
|
config.TargetOS = config.Windows
|
||||||
default:
|
default:
|
||||||
return b, &errors.InvalidParameterValue{Value: args[i], Parameter: "os"}
|
return b, &InvalidValueError{Value: args[i], Parameter: "os"}
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if strings.HasPrefix(args[i], "-") {
|
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])
|
b.Files = append(b.Files, args[i])
|
||||||
@ -79,7 +78,7 @@ func buildExecutable(args []string) (*build.Build, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.TargetOS == config.Unknown {
|
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 {
|
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 (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
xerrors "git.akyoto.dev/cli/q/src/errors"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// exit returns the exit code depending on the error type.
|
// exit returns the exit code depending on the error type.
|
||||||
func exit(err error) int {
|
func exit(err error) int {
|
||||||
var (
|
var (
|
||||||
exit *exec.ExitError
|
exit *exec.ExitError
|
||||||
expectedParameter *xerrors.ExpectedCLIParameter
|
expectedParameter *ExpectedParameterError
|
||||||
unknownParameter *xerrors.UnknownCLIParameter
|
unknownParameter *UnknownParameterError
|
||||||
|
invalidValue *InvalidValueError
|
||||||
)
|
)
|
||||||
|
|
||||||
if errors.As(err, &exit) {
|
if errors.As(err, &exit) {
|
||||||
return exit.ExitCode()
|
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
|
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