use serde::{Deserialize, Serialize};
use crate::models::common::{
CursorPageInfo, MessageError, MessageGeneralStatus, Platform, Price, Status,
};
use crate::models::send::SmsMessageContent;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LogsResponse {
#[serde(default)]
pub results: Vec<SmsLog>,
pub cursor: Option<CursorPageInfo>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsLog {
pub sender: Option<String>,
pub destination: Option<String>,
pub bulk_id: Option<String>,
pub message_id: Option<String>,
pub sent_at: Option<String>,
pub done_at: Option<String>,
pub message_count: Option<i32>,
pub price: Option<Price>,
pub status: Option<Status>,
pub error: Option<MessageError>,
pub platform: Option<Platform>,
pub content: Option<SmsMessageContent>,
pub campaign_reference_id: Option<String>,
pub mcc_mnc: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct LogsQuery {
#[serde(skip_serializing_if = "Option::is_none")]
pub mcc: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub mnc: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sender: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub destination: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty", serialize_with = "csv")]
pub bulk_id: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty", serialize_with = "csv")]
pub message_id: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub general_status: Option<MessageGeneralStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sent_since: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sent_until: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub entity_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub application_id: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty", serialize_with = "csv")]
pub campaign_reference_id: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub use_cursor: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub cursor: Option<String>,
}
fn csv<S>(values: &[String], serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(&values.join(","))
}