//! This module provides the error enum to handle different errors associated while requesting data from | |
//! the redis server using an async connection pool. | |
use std::fmt; | |
use redis::RedisError; | |
/// A custom error type used for handling redis async pool associated errors. | |
pub enum CacheError { | |
/// This variant handles all errors related to `RedisError`, | |
RedisError(RedisError), | |
/// This variant handles the errors which occurs when all the connections | |
/// in the connection pool return a connection dropped redis error. | |
PoolExhaustionWithConnectionDropError, | |
/// Whenever serialization or deserialization fails during communication with the cache. | |
SerializationError, | |
/// Returned when the value is missing. | |
MissingValue, | |
} | |
impl fmt::Display for CacheError { | |
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | |
match self { | |
CacheError::RedisError(redis_error) => { | |
if let Some(detail) = redis_error.detail() { | |
write!(f, "{}", detail) | |
} else { | |
write!(f, "") | |
} | |
} | |
CacheError::PoolExhaustionWithConnectionDropError => { | |
write!( | |
f, | |
"Error all connections from the pool dropped with connection error" | |
) | |
} | |
CacheError::MissingValue => { | |
write!(f, "The value is missing from the cache") | |
} | |
CacheError::SerializationError => { | |
write!(f, "Unable to serialize, deserialize from the cache") | |
} | |
} | |
} | |
} | |
impl error_stack::Context for CacheError {} | |