pub type Result<T> = std::result::Result<T, Error>;
#[derive(thiserror::Error, Debug)]
pub enum Error {
#[error("redis: {0}")]
Redis(#[from] fred::error::Error),
#[error("encode: {0}")]
Encode(#[from] rmp_serde::encode::Error),
#[error("decode: {0}")]
Decode(#[from] rmp_serde::decode::Error),
#[error("config: {0}")]
Config(String),
#[error("shutdown")]
Shutdown,
}
#[derive(thiserror::Error, Debug)]
#[error("handler: {inner}")]
pub struct HandlerError {
inner: Box<dyn std::error::Error + Send + Sync>,
unrecoverable: bool,
}
impl HandlerError {
pub fn new<E>(err: E) -> Self
where
E: std::error::Error + Send + Sync + 'static,
{
Self {
inner: Box::new(err),
unrecoverable: false,
}
}
pub fn unrecoverable<E>(err: E) -> Self
where
E: std::error::Error + Send + Sync + 'static,
{
Self {
inner: Box::new(err),
unrecoverable: true,
}
}
pub fn is_unrecoverable(&self) -> bool {
self.unrecoverable
}
pub fn source_err(&self) -> &(dyn std::error::Error + Send + Sync) {
self.inner.as_ref()
}
pub fn into_source(self) -> Box<dyn std::error::Error + Send + Sync> {
self.inner
}
}