use std::convert::Infallible;
use http::uri::InvalidUri;
use snafu::{AsErrorSource, Snafu};
use crate::platform::MaybeSendSync;
pub trait Error: std::error::Error + AsErrorSource + MaybeSendSync + 'static {
fn is_retryable(&self) -> bool;
}
impl Error for Infallible {
fn is_retryable(&self) -> bool {
false
}
}
#[derive(Debug, Snafu)]
#[snafu(transparent)]
pub struct BoxedError {
source: Box<dyn Error>,
}
impl BoxedError {
pub fn from_err<E: Error + 'static>(err: E) -> Self {
Self {
source: Box::new(err),
}
}
}
impl Error for BoxedError {
fn is_retryable(&self) -> bool {
self.source.is_retryable()
}
}
impl Error for InvalidUri {
fn is_retryable(&self) -> bool {
false
}
}