use derive_more::derive::From;
use serde::Serialize;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Debug, From)]
pub enum Error {
#[from]
CreatePoolError(deadpool_redis::CreatePoolError),
#[from]
PoolError(deadpool_redis::PoolError),
#[from]
Redis(super::RedisError),
#[from]
Serde(serde_json::Error),
}
impl Serialize for Error {
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
match self {
Error::CreatePoolError(create_pool_error) => {
serializer.serialize_str(&create_pool_error.to_string())
}
Error::PoolError(pool_error) => {
serializer.serialize_str(&pool_error.to_string())
}
Error::Redis(redis_error) => {
serializer.serialize_str(&redis_error.to_string())
}
Error::Serde(serde_error) => {
serializer.serialize_str(&serde_error.to_string())
}
}
}
}
impl core::fmt::Display for Error {
fn fmt(&self, fmt: &mut core::fmt::Formatter) -> core::result::Result<(), core::fmt::Error> {
write!(fmt, "{self:?}")
}
}
impl std::error::Error for Error {}