use reqwest::StatusCode;
use std::time::Duration;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum MetaForgeError {
#[error("http transport error: {0}")]
Transport(#[source] reqwest::Error),
#[error("http client error: {0}")]
Reqwest(#[from] reqwest::Error),
#[error("unexpected http status: {0}")]
HttpStatus(StatusCode),
#[error("rate limited; wait {wait:?} before retrying")]
RateLimited { wait: Duration },
#[error("invalid base url: {0}")]
InvalidBaseUrl(String),
}
impl MetaForgeError {
pub fn is_transient(&self) -> bool {
match self {
MetaForgeError::Transport(_) => true,
MetaForgeError::HttpStatus(code) => code.is_server_error(),
MetaForgeError::RateLimited { .. } => true,
_ => false,
}
}
}