mirror of
https://github.com/sstent/go-garth.git
synced 2026-01-26 00:52:40 +00:00
sync
This commit is contained in:
82
errors.go
Normal file
82
errors.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package garth
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
// RequestError captures request context for enhanced error reporting
|
||||
type RequestError struct {
|
||||
Method string
|
||||
URL string
|
||||
Query url.Values
|
||||
StatusCode int
|
||||
Cause error
|
||||
}
|
||||
|
||||
// NewRequestError creates a new RequestError instance
|
||||
func NewRequestError(method, url string, query url.Values, statusCode int, cause error) *RequestError {
|
||||
return &RequestError{
|
||||
Method: method,
|
||||
URL: url,
|
||||
Query: query,
|
||||
StatusCode: statusCode,
|
||||
Cause: cause,
|
||||
}
|
||||
}
|
||||
|
||||
// Error implements the error interface for RequestError
|
||||
func (e *RequestError) Error() string {
|
||||
return e.Cause.Error()
|
||||
}
|
||||
|
||||
// GetStatusCode returns the HTTP status code
|
||||
func (e *RequestError) GetStatusCode() int {
|
||||
return e.StatusCode
|
||||
}
|
||||
|
||||
// GetType returns the error category
|
||||
func (e *RequestError) GetType() string {
|
||||
return "request_error"
|
||||
}
|
||||
|
||||
// GetCause returns the underlying error
|
||||
func (e *RequestError) GetCause() error {
|
||||
return e.Cause
|
||||
}
|
||||
|
||||
// Unwrap returns the underlying error
|
||||
func (e *RequestError) Unwrap() error {
|
||||
return e.Cause
|
||||
}
|
||||
|
||||
// RequestContext returns the request context details
|
||||
func (e *RequestError) RequestContext() (method, url string, query url.Values) {
|
||||
return e.Method, e.URL, e.Query
|
||||
}
|
||||
|
||||
// Helper functions for common error checks
|
||||
|
||||
// IsNotFoundError checks if an error is a not found error
|
||||
func IsNotFoundError(err error) bool {
|
||||
if e, ok := err.(Error); ok {
|
||||
return e.GetStatusCode() == http.StatusNotFound
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// IsAuthenticationError checks if an error is an authentication error
|
||||
func IsAuthenticationError(err error) bool {
|
||||
if e, ok := err.(Error); ok {
|
||||
return e.GetStatusCode() == http.StatusUnauthorized
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// IsRateLimitError checks if an error is a rate limit error
|
||||
func IsRateLimitError(err error) bool {
|
||||
if e, ok := err.(Error); ok {
|
||||
return e.GetStatusCode() == http.StatusTooManyRequests
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user