use std::fmt;
use reqwest::StatusCode;
#[derive(Debug)]
pub enum Error {
Transport(reqwest_middleware::Error),
Api(ApiError),
PaginationHault(u64),
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::Transport(e) => write!(f, "frontegg error: transport: {e}"),
Error::Api(e) => write!(f, "frontegg error: api: {e}"),
Error::PaginationHault(e) => write!(f, "frontegg pagination haulted: next_page: {e}"),
}
}
}
impl std::error::Error for Error {}
#[derive(Debug, Clone)]
pub struct ApiError {
pub status_code: StatusCode,
pub messages: Vec<String>,
}
impl fmt::Display for ApiError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{} (status {})",
self.messages.join(","),
self.status_code
)
}
}
impl std::error::Error for ApiError {}
impl From<reqwest_middleware::Error> for Error {
fn from(e: reqwest_middleware::Error) -> Error {
Error::Transport(e)
}
}
impl From<reqwest::Error> for Error {
fn from(e: reqwest::Error) -> Error {
Error::Transport(reqwest_middleware::Error::from(e))
}
}
impl From<ApiError> for Error {
fn from(e: ApiError) -> Error {
Error::Api(e)
}
}