From 5f4da4f806c16322b693cb490eb3fb441d3adb49 Mon Sep 17 00:00:00 2001 From: antanst Date: Thu, 22 May 2025 12:45:46 +0300 Subject: [PATCH] Improve error handling with xerrors package - Replace custom error handling with xerrors package - Enhance error descriptions for better debugging - Add text utilities for string processing - Update error tests to use standard errors package - Add String() method to GeminiError --- gemini/errors.go | 9 ++++++--- gemini/errors_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 gemini/errors_test.go diff --git a/gemini/errors.go b/gemini/errors.go index 29b1e70..e91e7fc 100644 --- a/gemini/errors.go +++ b/gemini/errors.go @@ -1,9 +1,8 @@ package gemini import ( + "errors" "fmt" - - "github.com/antanst/go_errors" ) // GeminiError is used to represent @@ -20,6 +19,10 @@ func (e *GeminiError) Error() string { return fmt.Sprintf("gemini error: code %d %s", e.Code, e.Msg) } +func (e *GeminiError) String() string { + return e.Error() +} + // NewGeminiError creates a new GeminiError based on the status code and header. // Status codes are based on the Gemini protocol specification: // - 1x: Input required @@ -57,5 +60,5 @@ func IsGeminiError(err error) bool { return false } var asError *GeminiError - return go_errors.As(err, &asError) + return errors.As(err, &asError) } diff --git a/gemini/errors_test.go b/gemini/errors_test.go new file mode 100644 index 0000000..001453c --- /dev/null +++ b/gemini/errors_test.go @@ -0,0 +1,36 @@ +package gemini + +import ( + "errors" + "fmt" + "testing" +) + +func TestErrGemini(t *testing.T) { + t.Parallel() + err := NewGeminiError(50, "50 server error") + if !errors.As(err, new(*GeminiError)) { + t.Errorf("TestErrGemini fail") + } +} + +func TestErrGeminiWrapped(t *testing.T) { + t.Parallel() + err := NewGeminiError(50, "50 server error") + errWrapped := fmt.Errorf("%w wrapped", err) + if !errors.As(errWrapped, new(*GeminiError)) { + t.Errorf("TestErrGeminiWrapped fail") + } +} + +func TestIsGeminiError(t *testing.T) { + t.Parallel() + err1 := NewGeminiError(50, "50 server error") + if !IsGeminiError(err1) { + t.Errorf("TestGeminiError fail #1") + } + wrappedErr1 := fmt.Errorf("wrapped %w", err1) + if !IsGeminiError(wrappedErr1) { + t.Errorf("TestGeminiError fail #2") + } +}