refactor error types

This commit is contained in:
2025-09-07 01:02:05 +04:00
parent 5cc13cfe7e
commit 896bb3ad2d
5 changed files with 25 additions and 25 deletions

View File

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

View File

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

View File

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

View File

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

View File

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