redis_client/
errors.rs

1use std::error;
2use std::error::Error;
3use std::fmt;
4use std::io;
5use std::num;
6use std::str;
7use std::sync::mpsc;
8use types::{PubSubType, SenderType};
9
10#[derive(Debug, Clone)]
11pub enum ParsingError {
12    BadIdentifier(String),
13}
14
15impl fmt::Display for ParsingError {
16    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17        match *self {
18            ParsingError::BadIdentifier(ref err) => write!(f, "Invalid identifer: {}", err),
19        }
20    }
21}
22
23impl error::Error for ParsingError {
24    fn description(&self) -> &str {
25        match *self {
26            ParsingError::BadIdentifier(ref err) => err,
27        }
28    }
29
30    fn cause(&self) -> Option<&error::Error> {
31        match *self {
32            ParsingError::BadIdentifier(ref _err) => Some(self),
33        }
34    }
35}
36
37#[derive(Debug)]
38pub enum RedisError {
39	Io(io::Error),
40	Utf8(str::Utf8Error),
41    ParseInt(num::ParseIntError),
42    Parse(ParsingError),
43    Response(String),
44    MpscRecv(mpsc::RecvError),
45    MpscSendBytes(mpsc::SendError<(SenderType, u32, Vec<u8>)>),
46    MpscSendPubSubBytes(mpsc::SendError<(PubSubType, u32, Vec<u8>)>),
47    MpscTryRecv(mpsc::TryRecvError),
48}
49
50impl Clone for RedisError {
51    fn clone(&self) -> RedisError {
52        match *self {
53            RedisError::Io(ref err) => RedisError::Io(io::Error::new(err.kind(), err.description())),
54            RedisError::Utf8(ref err) => RedisError::Utf8(err.clone()),
55            RedisError::ParseInt(ref err) => RedisError::ParseInt(err.clone()),
56            RedisError::Parse(ref err) => RedisError::Parse(err.clone()),
57            RedisError::Response(ref err) => RedisError::Response(err.clone()),
58            RedisError::MpscRecv(ref err) => RedisError::MpscRecv(err.clone()),
59            RedisError::MpscSendBytes(ref err) => RedisError::MpscSendBytes(err.clone()),
60            RedisError::MpscSendPubSubBytes(ref err) => RedisError::MpscSendPubSubBytes(err.clone()),
61            RedisError::MpscTryRecv(ref err) => RedisError::MpscTryRecv(err.clone()),
62        }
63    }
64}
65
66impl fmt::Display for RedisError {
67    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
68        match *self {
69            RedisError::Io(ref err) => write!(f, "IO error: {}", err),
70            RedisError::Utf8(ref err) => write!(f, "Utf8 error: {}", err),
71            RedisError::ParseInt(ref err) => write!(f, "Parse Int error: {}", err),
72            RedisError::Parse(ref err) => write!(f, "Parsing error: {}", err),
73            RedisError::Response(ref err) => write!(f, "Response error: {}", err),
74            RedisError::MpscRecv(ref err) => write!(f, "MpscRecv error: {}", err),
75            RedisError::MpscSendBytes(ref err) => write!(f, "MpscSendBytes error: {}", err),
76            RedisError::MpscSendPubSubBytes(ref err) => write!(f, "MpscSendPubSubBytes error: {}", err),
77            RedisError::MpscTryRecv(ref err) => write!(f, "MpscTryRecv error: {}", err),
78        }
79    }
80}
81
82impl error::Error for RedisError {
83    fn description(&self) -> &str {
84        match *self {
85            RedisError::Io(ref err) => err.description(),
86            RedisError::Utf8(ref err) => err.description(),
87            RedisError::ParseInt(ref err) => err.description(),
88            RedisError::Parse(ref err) => err.description(),
89            RedisError::Response(ref err) => err,
90            RedisError::MpscRecv(ref err) => err.description(),
91            RedisError::MpscSendBytes(ref err) => err.description(),
92            RedisError::MpscSendPubSubBytes(ref err) => err.description(),
93            RedisError::MpscTryRecv(ref err) => err.description(),
94        }
95    }
96
97    fn cause(&self) -> Option<&error::Error> {
98        match *self {
99            RedisError::Io(ref err) => Some(err),
100            RedisError::Utf8(ref err) => Some(err),
101            RedisError::ParseInt(ref err) => Some(err),
102            RedisError::Parse(ref err) => Some(err),
103            RedisError::Response(ref _err) => Some(self),
104            RedisError::MpscRecv(ref err) => Some(err),
105            RedisError::MpscSendBytes(ref err) => Some(err),
106            RedisError::MpscSendPubSubBytes(ref err) => Some(err),
107            RedisError::MpscTryRecv(ref err) => Some(err),
108        }
109    }
110}
111
112impl From<io::Error> for RedisError {
113    fn from(err: io::Error) -> RedisError {
114        RedisError::Io(err)
115    }
116}
117
118impl From<str::Utf8Error> for RedisError {
119    fn from(err: str::Utf8Error) -> RedisError {
120        RedisError::Utf8(err)
121    }
122}
123
124impl From<num::ParseIntError> for RedisError {
125    fn from(err: num::ParseIntError) -> RedisError {
126        RedisError::ParseInt(err)
127    }
128}
129
130impl From<ParsingError> for RedisError {
131    fn from(err: ParsingError) -> RedisError {
132        RedisError::Parse(err)
133    }
134}
135
136impl From<String> for RedisError {
137    fn from(err: String) -> RedisError {
138        RedisError::Response(err)
139    }
140}
141
142impl From<mpsc::RecvError> for RedisError {
143    fn from(err: mpsc::RecvError) -> RedisError {
144        RedisError::MpscRecv(err)
145    }
146}
147
148impl From<mpsc::SendError<(SenderType, u32, Vec<u8>)>> for RedisError {
149    fn from(err: mpsc::SendError<(SenderType, u32, Vec<u8>)>) -> RedisError {
150        RedisError::MpscSendBytes(err)
151    }
152}
153
154impl From<mpsc::SendError<(PubSubType, u32, Vec<u8>)>> for RedisError {
155    fn from(err: mpsc::SendError<(PubSubType, u32, Vec<u8>)>) -> RedisError {
156        RedisError::MpscSendPubSubBytes(err)
157    }
158}
159
160impl From<mpsc::TryRecvError> for RedisError {
161    fn from(err: mpsc::TryRecvError) -> RedisError {
162        RedisError::MpscTryRecv(err)
163    }
164}