#[cfg(feature = "axum")]
use axum::{
http::StatusCode,
response::{IntoResponse, Json, Response},
};
#[cfg(feature = "axum")]
use serde::Serialize;
#[cfg(feature = "axum")]
use crate::result::{ApiResult, ErrorCode};
#[cfg(feature = "axum")]
impl<T: Serialize> IntoResponse for ApiResult<T> {
fn into_response(self) -> Response {
let status = self
.code
.and_then(|code| ErrorCode::from_i32(code))
.map(|err_code| err_code.to_axum_status())
.unwrap_or_else(|| {
if self.success {
StatusCode::OK
} else {
StatusCode::INTERNAL_SERVER_ERROR
}
});
(status, Json(self)).into_response()
}
}