use chrono::Utc;
use serde::{Deserialize, Serialize};
#[cfg(feature = "http")]
use utoipa::ToSchema;
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "camelCase")]
pub struct ApiResponse<T> {
pub success: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<T>,
pub timestamp: String,
}
impl<T> ApiResponse<T> {
pub fn success(data: T) -> Self {
Self {
success: true,
data: Some(data),
timestamp: Utc::now().to_rfc3339(),
}
}
pub fn error() -> ApiResponse<()> {
ApiResponse {
success: false,
data: None,
timestamp: Utc::now().to_rfc3339(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct EmptyResponse {
pub message: String,
}
impl EmptyResponse {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
}