pub mod auth;
pub mod embedded;
pub mod extractors;
pub mod sse;
use axum::http::StatusCode;
use axum::Json;
use log::error;
use crate::utils::apierror::ApiError;
pub type ApiResult<T> = Result<(StatusCode, Json<T>), (StatusCode, Json<ApiError>)>;
pub fn response_error_http(http: u16, error: ApiError) -> (StatusCode, Json<ApiError>) {
if http == 500 {
error!("{}", error);
if let Some(backtrace) = &error.backtrace {
error!("{}", backtrace);
}
}
(StatusCode::from_u16(http).unwrap(), Json(error))
}
pub fn response_error(error: ApiError) -> (StatusCode, Json<ApiError>) {
response_error_http(error.http, error)
}
pub fn response_ok_http<T>(http: u16, data: T) -> (StatusCode, Json<T>) {
(StatusCode::from_u16(http).unwrap(), Json(data))
}
pub fn response_ok<T>(data: T) -> (StatusCode, Json<T>) {
response_ok_http(200, data)
}
pub fn response<T>(result: Result<T, ApiError>) -> ApiResult<T> {
result.map_err(response_error).map(response_ok)
}