warp10 0.11.1

Warp10 client for rust
Documentation
extern crate reqwest;
extern crate url;

use response::*;

use std::{error, fmt, io, result};

#[derive(Debug)]
pub enum Error {
    ApiError(Response),
    HttpError(reqwest::Error),
    IoError(io::Error),
    UrlError(url::ParseError),
}

impl fmt::Display for Error {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match *self {
            Error::ApiError(ref resp) => write!(f, "Warp10 API error: {:?}", resp),
            Error::HttpError(ref err) => write!(f, "Warp10 HTTP error: {}", err),
            Error::IoError(ref err)   => write!(f, "Warp10 IO error: {}", err),
            Error::UrlError(ref err)  => write!(f, "Warp10 URL error: {}",  err),
        }
    }
}

impl error::Error for Error {
    fn description(&self) -> &str {
        match *self {
            Error::ApiError(ref resp) => resp.payload(),
            Error::HttpError(ref err) => err.description(),
            Error::IoError(ref err)   => err.description(),
            Error::UrlError(ref err)  => err.description(),
        }
    }

    fn cause(&self) -> Option<&error::Error> {
        match *self {
            Error::ApiError(_)        => None,
            Error::HttpError(ref err) => Some(err),
            Error::IoError(ref err)   => Some(err),
            Error::UrlError(ref err)  => Some(err),
        }
    }
}

impl Error {
    pub fn api_error(response: Response) -> Error {
        Error::ApiError(response)
    }
}

impl From<reqwest::Error> for Error {
    fn from(err: reqwest::Error) -> Error {
        Error::HttpError(err)
    }
}

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

impl From<url::ParseError> for Error {
    fn from(err: url::ParseError) -> Error {
        Error::UrlError(err)
    }
}

pub type Result<T> = result::Result<T, Error>;