use serde::{Deserialize, Serialize};
use crate::models::common::{
DeliveryTimeWindow, Platform, RegionalOptions, SendingSpeedLimit, Status, ValidityPeriod,
};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SmsRequest {
pub messages: Vec<SmsMessage>,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<SmsRequestOptions>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsRequestOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub schedule: Option<RequestSchedulingSettings>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracking: Option<UrlOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub include_sms_count_in_response: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversion_tracking: Option<ConversionTracking>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RequestSchedulingSettings {
#[serde(skip_serializing_if = "Option::is_none")]
pub bulk_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sending_speed_limit: Option<SendingSpeedLimit>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UrlOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub shorten_url: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub track_clicks: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tracking_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub remove_protocol: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub custom_domain: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConversionTracking {
#[serde(skip_serializing_if = "Option::is_none")]
pub use_conversion_tracking: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub conversion_tracking_name: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SmsMessage {
#[serde(skip_serializing_if = "Option::is_none")]
pub sender: Option<String>,
pub destinations: Vec<SmsToDestination>,
pub content: SmsMessageContent,
#[serde(skip_serializing_if = "Option::is_none")]
pub options: Option<SmsMessageOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub webhooks: Option<Webhooks>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsToDestination {
pub to: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub message_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_id: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SmsMessageContent {
Text(SmsTextMessageContent),
Binary(SmsBinaryMessageContent),
}
impl Default for SmsMessageContent {
fn default() -> Self {
Self::Text(SmsTextMessageContent::default())
}
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SmsTextMessageContent {
pub text: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub transliteration: Option<TransliterationCode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language: Option<SmsLanguage>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsBinaryMessageContent {
pub hex: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_coding: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub esm_class: Option<i32>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
#[allow(missing_docs)]
pub enum TransliterationCode {
None,
Turkish,
Greek,
Cyrillic,
SerbianCyrillic,
CentralEuropean,
Baltic,
NonUnicode,
Portuguese,
Colombian,
BulgarianCyrillic,
All,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsLanguage {
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<LanguageCode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub single_shift: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub locking_shift: Option<bool>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
pub enum LanguageCode {
None,
#[serde(rename = "TR")]
Tr,
#[serde(rename = "ES")]
Es,
#[serde(rename = "PT")]
Pt,
Autodetect,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsMessageOptions {
#[serde(skip_serializing_if = "Option::is_none")]
pub platform: Option<Platform>,
#[serde(skip_serializing_if = "Option::is_none")]
pub validity_period: Option<ValidityPeriod>,
#[serde(skip_serializing_if = "Option::is_none")]
pub delivery_time_window: Option<DeliveryTimeWindow>,
#[serde(skip_serializing_if = "Option::is_none")]
pub campaign_reference_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regional: Option<RegionalOptions>,
#[serde(skip_serializing_if = "Option::is_none")]
pub flash: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Webhooks {
#[serde(skip_serializing_if = "Option::is_none")]
pub delivery: Option<MessageDeliveryReporting>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub callback_data: Option<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct MessageDeliveryReporting {
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub intermediate_report: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub notify: Option<bool>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsResponse {
pub bulk_id: Option<String>,
pub messages: Vec<SmsMessageResponse>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsMessageResponse {
pub message_id: Option<String>,
pub status: Option<Status>,
pub destination: Option<String>,
pub details: Option<SmsMessageResponseDetails>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SmsMessageResponseDetails {
pub message_count: Option<i32>,
}