#[cfg(test)]
mod tests;
#[allow(non_snake_case)]
pub mod http;
#[deprecated(note = "Use `http::HttpResponse` variants or builder instead")]
pub mod standard;
use http::HttpResponse;
pub type Result<T> = std::result::Result<T, HttpResponse>;
#[macro_export]
macro_rules! response {
($status:expr) => {{
let status = ::axum::http::StatusCode::from_u16($status)
.expect("Invalid status code");
$crate::http::HttpResponse::builder(status)
.message(status.canonical_reason().unwrap_or("No reason"))
}};
($status:expr, { $value:ident }) => {{
let status = ::axum::http::StatusCode::from_u16($status)
.expect("Invalid status code");
let json = ::serde_json::to_value(&$value).unwrap_or_else(|err| {
eprintln!("Warning: Failed to serialize response data: {err}");
json!({ "error": "Serialization failed" })
});
$crate::http::HttpResponse::builder(status)
.message(status.canonical_reason().unwrap_or("No reason"))
.data(json)
}};
($status:expr, { $($json:tt)* }) => {{
let status = ::axum::http::StatusCode::from_u16($status)
.expect("Invalid status code");
let mut json = ::serde_json::json!({ $($json)* });
let message = json.get("message")
.and_then(|v| v.as_str())
.map(|s| s.to_string());
if let Some(obj) = json.as_object_mut() {
obj.remove("message");
}
let mut response = $crate::http::HttpResponse::builder(status)
.message(status.canonical_reason().unwrap_or("No reason"))
.data(json);
if let Some(msg) = message {
response = response.message(msg);
}
response
}};
}