1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use std;
use redis::RedisError;


#[derive(Debug)]
pub enum CacheError {
    RedisCacheError(RedisError),
    InsertionError(String),
    DeletionError(String),
    AccessError(String),
    ConnectionError(String),
    Other(String),
}

use CacheError::*;

impl std::fmt::Display for CacheError {
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result<> {
        match *self {
            RedisCacheError(ref e) => e.fmt(f),
            InsertionError(ref desc) => write!(f, "Insertion error: {}", desc),
            DeletionError(ref desc) => write!(f, "Deletion error: {}", desc),
            AccessError(ref desc) => write!(f, "Access error: {}", desc),
            ConnectionError(ref desc) => write!(f, "Connection error: {}", desc),
            Other(ref desc) => write!(f, "Unknown error: {}", desc),
        }
    }
}

impl std::error::Error for CacheError {
    fn description(&self) -> &str {
        match *self {
            RedisCacheError(ref e) => e.description(),
            InsertionError(_) => "Insertion error",
            DeletionError(_) => "Deletion error",
            AccessError(_) => "Access error",
            ConnectionError(_) => "Connection error",
            Other(_) => "Unknown error",
        }
    }
}

impl From<RedisError> for CacheError {
    fn from(e: RedisError) -> Self {
        CacheError::RedisCacheError(e)
    }
}