package errors import "fmt" // APIError represents a structured error from an upstream API. type APIError struct { Code int Message string HTTPStatus int } func (e *APIError) Error() string { if e == nil { return "" } if e.HTTPStatus > 0 { return fmt.Sprintf("api error: status=%d code=%d message=%s", e.HTTPStatus, e.Code, e.Message) } return fmt.Sprintf("api error: code=%d message=%s", e.Code, e.Message) } // Temporary returns true when the error is potentially recoverable. func (e *APIError) Temporary() bool { if e == nil { return false } if e.HTTPStatus >= 500 { return true } switch e.Code { case 429: return true default: return false } }