1use std::fmt;
2
3#[derive(Debug)]
5pub enum ConnectionError {
6 ClientCreation(redis::RedisError),
8 PoolCreation(String),
10 ConnectionAcquisition(redis::RedisError),
12 ConnectionManager(redis::RedisError),
14 Configuration(String),
16 Timeout,
18 Network(String),
20 Serialization(String),
22 Deserialization(String),
24}
25
26impl fmt::Display for ConnectionError {
27 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
28 match self {
29 ConnectionError::ClientCreation(e) => write!(f, "Failed to create Redis client: {e}"),
30 ConnectionError::PoolCreation(msg) => {
31 write!(f, "Failed to create connection pool: {msg}")
32 }
33 ConnectionError::ConnectionAcquisition(e) => {
34 write!(f, "Failed to acquire connection: {e}")
35 }
36 ConnectionError::ConnectionManager(e) => write!(f, "Connection manager error: {e}"),
37 ConnectionError::Configuration(msg) => write!(f, "Configuration error: {msg}"),
38 ConnectionError::Timeout => write!(f, "Connection timeout"),
39 ConnectionError::Network(msg) => write!(f, "Network error: {msg}"),
40 ConnectionError::Serialization(msg) => write!(f, "Serialization error: {msg}"),
41 ConnectionError::Deserialization(msg) => write!(f, "Deserialization error: {msg}"),
42 }
43 }
44}
45
46impl std::error::Error for ConnectionError {}
47
48impl From<redis::RedisError> for ConnectionError {
49 fn from(err: redis::RedisError) -> Self {
50 ConnectionError::ClientCreation(err)
51 }
52}
53
54pub type Result<T> = std::result::Result<T, ConnectionError>;