use reqwest::Url;
use serde_json::Value;
use thiserror::Error;
use crate::MiddlewareError;
#[derive(Debug, Error)]
pub enum RouteError {
#[error("Service discovery error: {0}")]
ServiceDiscovery(anyhow::Error),
#[error("Update scheme error: {0} => {1}")]
UpdateScheme(Url, String),
#[error("Update host error: {0} => {1}")]
UpdateHost(Url, String, url::ParseError),
#[error("Update port error: {0} => :{1}")]
UpdatePort(Url, u16),
}
#[derive(Debug, Error)]
pub enum ApiError {
#[error("Route error: {0}")]
Router(#[from] RouteError),
#[error("Reqwest error: {0}")]
Reqwest(#[from] reqwest::Error),
#[error("Middleware error: {0}")]
Middleware(#[from] anyhow::Error),
#[error("Serde(Json) error: {0}")]
SerdeJson(#[from] serde_json::Error),
#[error("Invalid json: {0}")]
InvalidJson(Value),
#[error("Not multipart form")]
NotMultipartForm,
#[error("Business error: {0} - {1:?}")]
BusinessError(i64, Option<String>),
}
impl From<MiddlewareError> for ApiError {
fn from(e: MiddlewareError) -> Self {
match e {
MiddlewareError::Reqwest(e) => Self::Reqwest(e),
MiddlewareError::Middleware(e) => Self::Middleware(e),
}
}
}
pub type ApiResult<T> = Result<T, ApiError>;