use axum::Json; use serde::Serialize; #[derive(Clone, Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct ApiResponse { #[serde(rename = "_meta")] #[serde(skip_serializing_if = "Option::is_none")] pub meta: Option, #[serde(skip_serializing_if = "Option::is_none")] pub data: Option, #[serde(skip_serializing_if = "Option::is_none")] pub error: Option<&'static str>, } impl ApiResponse { pub fn new(data: T) -> ApiResponse { Self { meta: None, data: Some(data), error: None, } } pub fn _new_empty() -> ApiResponse { Self { meta: None, data: None, error: None, } } pub fn _new_with_metadata(data: T, meta: ApiResponseMetadata) -> ApiResponse { Self { meta: Some(meta), data: Some(data), error: None, } } pub fn into_json_response(self) -> Json> { Json(self) } } impl ApiResponse<()> { pub fn error(error: &'static str) -> Self { Self { meta: None, data: None, error: Some(error), } } } #[derive(Clone, Debug, Serialize)] pub struct ApiResponseMetadata {}