mirror of
https://github.com/aykhans/dodo.git
synced 2025-09-08 03:50:46 +00:00
refactor error types
This commit is contained in:
@@ -174,7 +174,7 @@ func (parser ConfigCLIParser) Parse() (*Config, error) {
|
|||||||
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
fmt.Sprintf("config-file[%d]", i),
|
fmt.Sprintf("config-file[%d]", i),
|
||||||
configFile,
|
configFile,
|
||||||
fmt.Errorf("parse error: %w", err),
|
fmt.Errorf("parse error: %w", err),
|
||||||
@@ -198,7 +198,7 @@ func (parser ConfigCLIParser) Parse() (*Config, error) {
|
|||||||
case "url", "u":
|
case "url", "u":
|
||||||
urlParsed, err := url.Parse(urlInput)
|
urlParsed, err := url.Parse(urlInput)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(fieldParseErrors, *types.NewFieldParseError("url", urlInput, err))
|
fieldParseErrors = append(fieldParseErrors, types.NewFieldParseError("url", urlInput, err))
|
||||||
} else {
|
} else {
|
||||||
config.URL = urlParsed
|
config.URL = urlParsed
|
||||||
}
|
}
|
||||||
@@ -224,7 +224,7 @@ func (parser ConfigCLIParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(fmt.Sprintf("proxy[%d]", i), proxy, err),
|
types.NewFieldParseError(fmt.Sprintf("proxy[%d]", i), proxy, err),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("CONFIG_FILE"),
|
parser.getFullEnvName("CONFIG_FILE"),
|
||||||
configFile,
|
configFile,
|
||||||
fmt.Errorf("parse error: %w", err),
|
fmt.Errorf("parse error: %w", err),
|
||||||
@@ -57,7 +57,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("YES"),
|
parser.getFullEnvName("YES"),
|
||||||
yes,
|
yes,
|
||||||
errors.New("invalid value for boolean, expected 'true' or 'false'"),
|
errors.New("invalid value for boolean, expected 'true' or 'false'"),
|
||||||
@@ -73,7 +73,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("SKIP_VERIFY"),
|
parser.getFullEnvName("SKIP_VERIFY"),
|
||||||
skipVerify,
|
skipVerify,
|
||||||
errors.New("invalid value for boolean, expected 'true' or 'false'"),
|
errors.New("invalid value for boolean, expected 'true' or 'false'"),
|
||||||
@@ -93,7 +93,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(parser.getFullEnvName("URL"), urlEnv, err),
|
types.NewFieldParseError(parser.getFullEnvName("URL"), urlEnv, err),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
config.URL = urlEnvParsed
|
config.URL = urlEnvParsed
|
||||||
@@ -105,7 +105,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("DODOS"),
|
parser.getFullEnvName("DODOS"),
|
||||||
dodos,
|
dodos,
|
||||||
errors.New("invalid value for unsigned integer"),
|
errors.New("invalid value for unsigned integer"),
|
||||||
@@ -121,7 +121,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("REQUESTS"),
|
parser.getFullEnvName("REQUESTS"),
|
||||||
requests,
|
requests,
|
||||||
errors.New("invalid value for unsigned integer"),
|
errors.New("invalid value for unsigned integer"),
|
||||||
@@ -137,7 +137,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("DURATION"),
|
parser.getFullEnvName("DURATION"),
|
||||||
duration,
|
duration,
|
||||||
errors.New("invalid value duration, expected a duration string (e.g., '10s', '1h30m')"),
|
errors.New("invalid value duration, expected a duration string (e.g., '10s', '1h30m')"),
|
||||||
@@ -153,7 +153,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("TIMEOUT"),
|
parser.getFullEnvName("TIMEOUT"),
|
||||||
timeout,
|
timeout,
|
||||||
errors.New("invalid value duration, expected a duration string (e.g., '10s', '1h30m')"),
|
errors.New("invalid value duration, expected a duration string (e.g., '10s', '1h30m')"),
|
||||||
@@ -185,7 +185,7 @@ func (parser ConfigENVParser) Parse() (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
parser.getFullEnvName("PROXY"),
|
parser.getFullEnvName("PROXY"),
|
||||||
proxy,
|
proxy,
|
||||||
err,
|
err,
|
||||||
|
@@ -141,7 +141,7 @@ func (parser ConfigFileParser) ParseYAML(data []byte) (*Config, error) {
|
|||||||
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
utils.OnCustomError(func(err types.RemoteConfigFileParseError) error {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(
|
types.NewFieldParseError(
|
||||||
fmt.Sprintf("config-file[%d]", i),
|
fmt.Sprintf("config-file[%d]", i),
|
||||||
configFile,
|
configFile,
|
||||||
fmt.Errorf("parse error: %w", err),
|
fmt.Errorf("parse error: %w", err),
|
||||||
@@ -160,7 +160,7 @@ func (parser ConfigFileParser) ParseYAML(data []byte) (*Config, error) {
|
|||||||
if parsedData.URL != nil {
|
if parsedData.URL != nil {
|
||||||
urlParsed, err := url.Parse(*parsedData.URL)
|
urlParsed, err := url.Parse(*parsedData.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(fieldParseErrors, *types.NewFieldParseError("url", *parsedData.URL, err))
|
fieldParseErrors = append(fieldParseErrors, types.NewFieldParseError("url", *parsedData.URL, err))
|
||||||
} else {
|
} else {
|
||||||
config.URL = urlParsed
|
config.URL = urlParsed
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ func (parser ConfigFileParser) ParseYAML(data []byte) (*Config, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
fieldParseErrors = append(
|
fieldParseErrors = append(
|
||||||
fieldParseErrors,
|
fieldParseErrors,
|
||||||
*types.NewFieldParseError(fmt.Sprintf("proxy[%d]", i), proxy, err),
|
types.NewFieldParseError(fmt.Sprintf("proxy[%d]", i), proxy, err),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -23,11 +23,11 @@ type FieldParseError struct {
|
|||||||
Err error
|
Err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFieldParseError(field string, value string, err error) *FieldParseError {
|
func NewFieldParseError(field string, value string, err error) FieldParseError {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
err = ErrNoError
|
err = ErrNoError
|
||||||
}
|
}
|
||||||
return &FieldParseError{field, value, err}
|
return FieldParseError{field, value, err}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e FieldParseError) Error() string {
|
func (e FieldParseError) Error() string {
|
||||||
|
@@ -74,7 +74,7 @@ func TestFieldParseErrors_Error(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Error with single error returns single error message", func(t *testing.T) {
|
t.Run("Error with single error returns single error message", func(t *testing.T) {
|
||||||
fieldErr := *NewFieldParseError("field1", "value1", errors.New("error1"))
|
fieldErr := NewFieldParseError("field1", "value1", errors.New("error1"))
|
||||||
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr})
|
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr})
|
||||||
|
|
||||||
expected := "Field 'field1' parse failed: error1"
|
expected := "Field 'field1' parse failed: error1"
|
||||||
@@ -82,9 +82,9 @@ func TestFieldParseErrors_Error(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Error with multiple errors returns concatenated messages", func(t *testing.T) {
|
t.Run("Error with multiple errors returns concatenated messages", func(t *testing.T) {
|
||||||
fieldErr1 := *NewFieldParseError("field1", "value1", errors.New("error1"))
|
fieldErr1 := NewFieldParseError("field1", "value1", errors.New("error1"))
|
||||||
fieldErr2 := *NewFieldParseError("field2", "value2", errors.New("error2"))
|
fieldErr2 := NewFieldParseError("field2", "value2", errors.New("error2"))
|
||||||
fieldErr3 := *NewFieldParseError("field3", "value3", errors.New("error3"))
|
fieldErr3 := NewFieldParseError("field3", "value3", errors.New("error3"))
|
||||||
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2, fieldErr3})
|
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2, fieldErr3})
|
||||||
|
|
||||||
expected := "Field 'field1' parse failed: error1\nField 'field2' parse failed: error2\nField 'field3' parse failed: error3"
|
expected := "Field 'field1' parse failed: error1\nField 'field2' parse failed: error2\nField 'field3' parse failed: error3"
|
||||||
@@ -92,8 +92,8 @@ func TestFieldParseErrors_Error(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Error with two errors", func(t *testing.T) {
|
t.Run("Error with two errors", func(t *testing.T) {
|
||||||
fieldErr1 := *NewFieldParseError("username", "john", errors.New("too short"))
|
fieldErr1 := NewFieldParseError("username", "john", errors.New("too short"))
|
||||||
fieldErr2 := *NewFieldParseError("email", "invalid", errors.New("invalid format"))
|
fieldErr2 := NewFieldParseError("email", "invalid", errors.New("invalid format"))
|
||||||
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2})
|
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2})
|
||||||
|
|
||||||
expected := "Field 'username' parse failed: too short\nField 'email' parse failed: invalid format"
|
expected := "Field 'username' parse failed: too short\nField 'email' parse failed: invalid format"
|
||||||
@@ -103,8 +103,8 @@ func TestFieldParseErrors_Error(t *testing.T) {
|
|||||||
|
|
||||||
func TestNewFieldParseErrors(t *testing.T) {
|
func TestNewFieldParseErrors(t *testing.T) {
|
||||||
t.Run("Creates FieldParseErrors with correct values", func(t *testing.T) {
|
t.Run("Creates FieldParseErrors with correct values", func(t *testing.T) {
|
||||||
fieldErr1 := *NewFieldParseError("field1", "value1", errors.New("error1"))
|
fieldErr1 := NewFieldParseError("field1", "value1", errors.New("error1"))
|
||||||
fieldErr2 := *NewFieldParseError("field2", "value2", errors.New("error2"))
|
fieldErr2 := NewFieldParseError("field2", "value2", errors.New("error2"))
|
||||||
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2})
|
fieldErrors := NewFieldParseErrors([]FieldParseError{fieldErr1, fieldErr2})
|
||||||
|
|
||||||
assert.Len(t, fieldErrors.Errors, 2)
|
assert.Len(t, fieldErrors.Errors, 2)
|
||||||
|
Reference in New Issue
Block a user