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/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
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 ( 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
} }

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