Simplified CLI errors

This commit is contained in:
Eduard Urbach 2025-02-07 20:08:49 +01:00
parent c2d1084434
commit 5fc9cc4dff
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
6 changed files with 43 additions and 51 deletions

View File

@ -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
View 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)
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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)
}