Better error handling, many fixes all around

This commit is contained in:
2024-12-09 19:53:15 +02:00
parent b52d4f6532
commit 7a36614232
15 changed files with 520 additions and 233 deletions

View File

@@ -5,13 +5,13 @@ import (
"fmt"
)
type ErrGeminiStatusCode struct {
type GeminiError struct {
Msg string
Code int
Header string
}
func (e *ErrGeminiStatusCode) Error() string {
func (e *GeminiError) Error() string {
return fmt.Sprintf("%s: %s", e.Msg, e.Header)
}
@@ -31,7 +31,7 @@ func NewErrGeminiStatusCode(code int, header string) error {
default:
msg = "unexpected status code"
}
return &ErrGeminiStatusCode{
return &GeminiError{
Msg: msg,
Code: code,
Header: header,
@@ -39,7 +39,6 @@ func NewErrGeminiStatusCode(code int, header string) error {
}
var (
ErrGemini = errors.New("gemini general error")
ErrGeminiRobotsParse = errors.New("gemini robots.txt parse error")
ErrGeminiRobotsDisallowed = errors.New("gemini robots.txt disallowed")
ErrGeminiResponseHeader = errors.New("gemini response header error")
@@ -64,8 +63,10 @@ var (
// we would lose ability to check wrapped
// errors via errors.Is().
var KnownErrors = []error{
ErrGemini,
var errGemini *GeminiError
var knownErrors = []error{ //nolint:gochecknoglobals
errGemini,
ErrGeminiLinkLineParse,
ErrGeminiRobotsParse,
ErrGeminiRobotsDisallowed,
@@ -87,14 +88,14 @@ var KnownErrors = []error{
}
func IsKnownError(err error) bool {
var errGeminiStatusCode *ErrGeminiStatusCode
if errors.As(err, &errGeminiStatusCode) {
return true
}
for _, known := range KnownErrors {
for _, known := range knownErrors {
if errors.Is(err, known) {
return true
}
}
// Check for wrapped errors as well
if errors.As(err, new(*GeminiError)) {
return true
}
return false
}