Better error handling, many fixes all around
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user