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