nanocl_utils 0.1.1

Nanocl shared utils
Documentation
use super::io_error::{IoError, FromIo};
use super::http_error::HttpError;

#[derive(Debug)]
pub enum HttpClientError {
  IoError(IoError),
  HttpError(HttpError),
}

impl std::fmt::Display for HttpClientError {
  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
    match self {
      HttpClientError::IoError(err) => write!(f, "{}", err),
      HttpClientError::HttpError(err) => write!(f, "{}", err),
    }
  }
}

impl std::error::Error for HttpClientError {}

impl From<HttpClientError> for IoError {
  fn from(f: HttpClientError) -> Self {
    match f {
      HttpClientError::IoError(err) => err,
      HttpClientError::HttpError(err) => err.into(),
    }
  }
}

impl From<Box<HttpClientError>> for IoError {
  fn from(f: Box<HttpClientError>) -> Self {
    match *f {
      HttpClientError::IoError(err) => err,
      HttpClientError::HttpError(err) => err.into(),
    }
  }
}

impl From<HttpClientError> for Box<IoError> {
  fn from(f: HttpClientError) -> Self {
    match f {
      HttpClientError::IoError(err) => Box::new(err),
      HttpClientError::HttpError(err) => Box::new(err.into()),
    }
  }
}

impl From<Box<IoError>> for HttpClientError {
  fn from(f: Box<IoError>) -> Self {
    Self::IoError(*f)
  }
}

impl From<HttpError> for HttpClientError {
  fn from(f: HttpError) -> Self {
    Self::HttpError(f)
  }
}

impl From<HttpClientError> for HttpError {
  fn from(f: HttpClientError) -> Self {
    match f {
      HttpClientError::IoError(err) => err.into(),
      HttpClientError::HttpError(err) => err,
    }
  }
}

impl From<Box<HttpClientError>> for HttpClientError {
  fn from(f: Box<HttpClientError>) -> Self {
    *f
  }
}

impl FromIo<Box<HttpClientError>> for HttpClientError {
  fn map_err_context<C>(
    self,
    context: impl FnOnce() -> C,
  ) -> Box<HttpClientError>
  where
    C: ToString + std::fmt::Display,
  {
    match self {
      HttpClientError::IoError(err) => {
        Box::new(HttpClientError::IoError(err.map_err_context(context)))
      }
      HttpClientError::HttpError(err) => {
        Box::new(HttpClientError::HttpError(err.map_err_context(context)))
      }
    }
  }
}