use axum::{
http::StatusCode,
response::{IntoResponse, Json, Response},
};
use serde::Serialize;
#[derive(Serialize)]
pub struct ApiResponse<T: Serialize> {
pub status: &'static str,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<T>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
}
pub fn success<T: Serialize>(data: T) -> Response {
let response = ApiResponse {
status: "success",
data: Some(data),
message: None,
};
(StatusCode::OK, Json(response)).into_response()
}
pub fn created<T: Serialize>(data: T) -> Response {
let response = ApiResponse {
status: "success",
data: Some(data),
message: None,
};
(StatusCode::CREATED, Json(response)).into_response()
}
#[must_use]
pub fn error(status_code: StatusCode, message: String) -> Response {
let response = ApiResponse::<()> {
status: "error",
data: None,
message: Some(message),
};
(status_code, Json(response)).into_response()
}