anycms-core 0.4.0

A unified API response library supporting multiple Rust web frameworks
Documentation
#[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};

/// Axum framework integration for ApiResult
#[cfg(feature = "axum")]
impl<T: Serialize> IntoResponse for ApiResult<T> {
    fn into_response(self) -> Response {
        // Use the error code to determine the appropriate HTTP status code
        let status = self
            .code
            .and_then(|code| ErrorCode::from_i32(code))
            .map(|err_code| err_code.to_axum_status())
            .unwrap_or_else(|| {
                // Fallback to success field if code is not set
                if self.success {
                    StatusCode::OK
                } else {
                    StatusCode::INTERNAL_SERVER_ERROR
                }
            });

        (status, Json(self)).into_response()
    }
}