use crate::ClassifiedError;
pub trait ClassifiableError<'a, E> {
fn classify(&self) -> ClassifiedError<'_, E>;
}
#[cfg(feature = "reqwest")]
impl ClassifiableError<'_, Self> for reqwest::Error {
fn classify(&self) -> ClassifiedError<'_, Self> {
if self.is_connect() ||self.is_timeout() {
ClassifiedError::Transient(self)
} else {
ClassifiedError::Permanent(self)
}
}
}
#[cfg(feature = "reqwest")]
impl ClassifiableError<'_, Self> for reqwest::StatusCode {
fn classify(&self) -> ClassifiedError<'_, Self> {
if self.is_success() {
ClassifiedError::None(self)
} else if self.is_server_error() || *self == 429 {
ClassifiedError::Transient(self)
} else {
ClassifiedError::Permanent(self)
}
}
}
impl ClassifiableError<'_, Self> for serde_json::Error {
fn classify(&self) -> ClassifiedError<'_, Self> {
ClassifiedError::Permanent(self)
}
}