This commit is contained in:
2025-09-02 06:52:24 -07:00
commit 56f55daa85
179 changed files with 28841 additions and 0 deletions

82
errors.go Normal file
View 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
}