warp10 1.0.0

Warp10 client for rust
Documentation
use crate::response::*;

use isahc::http::uri::InvalidUri;
use std::{error, fmt, io, result};

#[derive(Debug)]
pub enum Error {
    ApiError(Warp10Response),
    HttpError(isahc::http::Error),
    HttpUriError(isahc::http::uri::InvalidUri),
    HttpBodyError(isahc::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::HttpUriError(ref err) => write!(f, "Warp10 HTTP URI error: {}", err),
            Error::HttpBodyError(ref err) => write!(f, "Warp10 HTTP body 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 cause(&self) -> Option<&dyn error::Error> {
        match *self {
            Error::ApiError(_) => None,
            Error::HttpError(ref err) => Some(err),
            Error::HttpUriError(ref err) => Some(err),
            Error::HttpBodyError(ref err) => Some(err),
            Error::IoError(ref err) => Some(err),
            Error::UrlError(ref err) => Some(err),
        }
    }
}

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

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

impl From<isahc::Error> for Error {
    fn from(err: isahc::Error) -> Error {
        Error::HttpBodyError(err)
    }
}

impl From<InvalidUri> for Error {
    fn from(err: InvalidUri) -> Error {
        Error::HttpUriError(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>;