use std::fmt;
#[derive(Debug)]
pub enum FetchError {
Network(String),
Abort(String),
Timeout(String),
TooManyRedirects(u32),
RedirectRefused(String),
Blocked(String),
Denied(ferrijs_permissions::Denied),
InvalidUrl(String),
Body(String),
Bridge(String),
}
impl fmt::Display for FetchError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Network(m)
| Self::Abort(m)
| Self::Timeout(m)
| Self::RedirectRefused(m)
| Self::Blocked(m)
| Self::InvalidUrl(m)
| Self::Body(m)
| Self::Bridge(m) => f.write_str(m),
Self::TooManyRedirects(max) => write!(f, "too many redirects (max {max})"),
Self::Denied(d) => d.fmt(f),
}
}
}
impl From<crate::net_guard::GuardError> for FetchError {
fn from(e: crate::net_guard::GuardError) -> Self {
match e {
crate::net_guard::GuardError::Denied(d) => Self::Denied(d),
other => Self::Blocked(other.to_string()),
}
}
}
impl std::error::Error for FetchError {}