redis-client 0.5.0

Redis client in Rust
Documentation
use std::error;
use std::error::Error;
use std::fmt;
use std::io;
use std::num;
use std::str;
use std::sync::mpsc;
use types::{PubSubType, SenderType};

#[derive(Debug, Clone)]
pub enum ParsingError {
    BadIdentifier(String),
}

impl fmt::Display for ParsingError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match *self {
            ParsingError::BadIdentifier(ref err) => write!(f, "Invalid identifer: {}", err),
        }
    }
}

impl error::Error for ParsingError {
    fn description(&self) -> &str {
        match *self {
            ParsingError::BadIdentifier(ref err) => err,
        }
    }

    fn cause(&self) -> Option<&error::Error> {
        match *self {
            ParsingError::BadIdentifier(ref _err) => Some(self),
        }
    }
}

#[derive(Debug)]
pub enum RedisError {
	Io(io::Error),
	Utf8(str::Utf8Error),
    ParseInt(num::ParseIntError),
    Parse(ParsingError),
    Response(String),
    MpscRecv(mpsc::RecvError),
    MpscSendBytes(mpsc::SendError<(SenderType, u32, Vec<u8>)>),
    MpscSendPubSubBytes(mpsc::SendError<(PubSubType, u32, Vec<u8>)>),
    MpscTryRecv(mpsc::TryRecvError),
}

impl Clone for RedisError {
    fn clone(&self) -> RedisError {
        match *self {
            RedisError::Io(ref err) => RedisError::Io(io::Error::new(err.kind(), err.description())),
            RedisError::Utf8(ref err) => RedisError::Utf8(err.clone()),
            RedisError::ParseInt(ref err) => RedisError::ParseInt(err.clone()),
            RedisError::Parse(ref err) => RedisError::Parse(err.clone()),
            RedisError::Response(ref err) => RedisError::Response(err.clone()),
            RedisError::MpscRecv(ref err) => RedisError::MpscRecv(err.clone()),
            RedisError::MpscSendBytes(ref err) => RedisError::MpscSendBytes(err.clone()),
            RedisError::MpscSendPubSubBytes(ref err) => RedisError::MpscSendPubSubBytes(err.clone()),
            RedisError::MpscTryRecv(ref err) => RedisError::MpscTryRecv(err.clone()),
        }
    }
}

impl fmt::Display for RedisError {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match *self {
            RedisError::Io(ref err) => write!(f, "IO error: {}", err),
            RedisError::Utf8(ref err) => write!(f, "Utf8 error: {}", err),
            RedisError::ParseInt(ref err) => write!(f, "Parse Int error: {}", err),
            RedisError::Parse(ref err) => write!(f, "Parsing error: {}", err),
            RedisError::Response(ref err) => write!(f, "Response error: {}", err),
            RedisError::MpscRecv(ref err) => write!(f, "MpscRecv error: {}", err),
            RedisError::MpscSendBytes(ref err) => write!(f, "MpscSendBytes error: {}", err),
            RedisError::MpscSendPubSubBytes(ref err) => write!(f, "MpscSendPubSubBytes error: {}", err),
            RedisError::MpscTryRecv(ref err) => write!(f, "MpscTryRecv error: {}", err),
        }
    }
}

impl error::Error for RedisError {
    fn description(&self) -> &str {
        match *self {
            RedisError::Io(ref err) => err.description(),
            RedisError::Utf8(ref err) => err.description(),
            RedisError::ParseInt(ref err) => err.description(),
            RedisError::Parse(ref err) => err.description(),
            RedisError::Response(ref err) => err,
            RedisError::MpscRecv(ref err) => err.description(),
            RedisError::MpscSendBytes(ref err) => err.description(),
            RedisError::MpscSendPubSubBytes(ref err) => err.description(),
            RedisError::MpscTryRecv(ref err) => err.description(),
        }
    }

    fn cause(&self) -> Option<&error::Error> {
        match *self {
            RedisError::Io(ref err) => Some(err),
            RedisError::Utf8(ref err) => Some(err),
            RedisError::ParseInt(ref err) => Some(err),
            RedisError::Parse(ref err) => Some(err),
            RedisError::Response(ref _err) => Some(self),
            RedisError::MpscRecv(ref err) => Some(err),
            RedisError::MpscSendBytes(ref err) => Some(err),
            RedisError::MpscSendPubSubBytes(ref err) => Some(err),
            RedisError::MpscTryRecv(ref err) => Some(err),
        }
    }
}

impl From<io::Error> for RedisError {
    fn from(err: io::Error) -> RedisError {
        RedisError::Io(err)
    }
}

impl From<str::Utf8Error> for RedisError {
    fn from(err: str::Utf8Error) -> RedisError {
        RedisError::Utf8(err)
    }
}

impl From<num::ParseIntError> for RedisError {
    fn from(err: num::ParseIntError) -> RedisError {
        RedisError::ParseInt(err)
    }
}

impl From<ParsingError> for RedisError {
    fn from(err: ParsingError) -> RedisError {
        RedisError::Parse(err)
    }
}

impl From<String> for RedisError {
    fn from(err: String) -> RedisError {
        RedisError::Response(err)
    }
}

impl From<mpsc::RecvError> for RedisError {
    fn from(err: mpsc::RecvError) -> RedisError {
        RedisError::MpscRecv(err)
    }
}

impl From<mpsc::SendError<(SenderType, u32, Vec<u8>)>> for RedisError {
    fn from(err: mpsc::SendError<(SenderType, u32, Vec<u8>)>) -> RedisError {
        RedisError::MpscSendBytes(err)
    }
}

impl From<mpsc::SendError<(PubSubType, u32, Vec<u8>)>> for RedisError {
    fn from(err: mpsc::SendError<(PubSubType, u32, Vec<u8>)>) -> RedisError {
        RedisError::MpscSendPubSubBytes(err)
    }
}

impl From<mpsc::TryRecvError> for RedisError {
    fn from(err: mpsc::TryRecvError) -> RedisError {
        RedisError::MpscTryRecv(err)
    }
}