pub enum IGDBError {
AuthenticationFailed(String),
RateLimited {
retry_after_ms: u64,
attempts: u32,
},
ApiError {
status: u16,
message: String,
},
NetworkError(Error),
DeserializationError(Error),
QueryBuildError(String),
TokenExpired,
InvalidConfiguration(String),
Custom(Box<dyn Error + Send + Sync>),
}Expand description
The primary error type for all IGDB client operations.
Every public method in this crate returns Result<T, IGDBError>,
giving consumers fine-grained control over error handling.
§Examples
Matching on specific error variants:
use igdb_atlas::error::IGDBError;
fn describe_error(err: &IGDBError) -> &'static str {
match err {
IGDBError::AuthenticationFailed(_) => "auth problem",
IGDBError::RateLimited { .. } => "too many requests",
IGDBError::ApiError { .. } => "IGDB returned an error",
IGDBError::NetworkError(_) => "network issue",
IGDBError::DeserializationError(_) => "bad response format",
IGDBError::QueryBuildError(_) => "invalid query",
IGDBError::TokenExpired => "token needs refresh",
IGDBError::InvalidConfiguration(_) => "bad config",
IGDBError::Custom(_) => "custom error",
}
}Variants§
AuthenticationFailed(String)
Authentication with Twitch OAuth failed.
This occurs when the client credentials are invalid, the token endpoint is unreachable, or the response is malformed.
RateLimited
The API rate limit (4 req/s) was hit despite backoff attempts.
Contains the last computed retry delay and how many attempts were made.
Fields
ApiError
IGDB returned an error response (4xx or 5xx).
NetworkError(Error)
A network/transport-level error from reqwest.
DeserializationError(Error)
Failed to deserialize the API response into a model.
QueryBuildError(String)
An error constructing or validating an Apicalypse query.
TokenExpired
The cached OAuth token has expired and must be refreshed.
InvalidConfiguration(String)
Invalid client configuration (missing credentials, bad URLs, etc.).
Custom(Box<dyn Error + Send + Sync>)
A user-supplied custom error, useful for wrapping external errors.
Implementations§
Source§impl IGDBError
impl IGDBError
Sourcepub fn from_custom<E: Error + Send + Sync + 'static>(err: E) -> Self
pub fn from_custom<E: Error + Send + Sync + 'static>(err: E) -> Self
Creates a custom error wrapping any type that implements std::error::Error.
§Examples
use igdb_atlas::error::IGDBError;
let io_err = std::io::Error::new(std::io::ErrorKind::Other, "disk full");
let igdb_err = IGDBError::from_custom(io_err);
assert!(igdb_err.to_string().contains("disk full"));Sourcepub fn is_retriable(&self) -> bool
pub fn is_retriable(&self) -> bool
Returns true if this error represents a retriable condition.
Currently, rate limit errors and certain network errors are considered retriable.
§Examples
use igdb_atlas::error::IGDBError;
let err = IGDBError::RateLimited { retry_after_ms: 1000, attempts: 2 };
assert!(err.is_retriable());
let err = IGDBError::AuthenticationFailed("bad creds".into());
assert!(!err.is_retriable());Sourcepub fn retry_after_ms(&self) -> Option<u64>
pub fn retry_after_ms(&self) -> Option<u64>
If this is a rate limit error, returns the recommended retry delay in milliseconds.
§Examples
use igdb_atlas::error::IGDBError;
let err = IGDBError::RateLimited { retry_after_ms: 2500, attempts: 3 };
assert_eq!(err.retry_after_ms(), Some(2500));
let err = IGDBError::TokenExpired;
assert_eq!(err.retry_after_ms(), None);