termii_rust/common/switch/
messaging.rs

1use serde::{Deserialize, Deserializer, Serialize};
2
3#[derive(Debug, Deserialize, Serialize)]
4pub struct MessageResponse {
5    #[serde(deserialize_with = "from_usize")]
6    pub message_id: String,
7    pub message: String,
8    pub balance: f64,
9    pub user: String,
10    pub code: Option<String>,
11}
12
13fn from_usize<'de, D>(deserializer: D) -> Result<String, D::Error>
14where
15    D: Deserializer<'de>,
16{
17    let s: usize = Deserialize::deserialize(deserializer)?;
18    Ok(s.to_string())
19}
20
21#[derive(Serialize, Deserialize, Debug)]
22pub struct MessageRequest {
23    pub to: String,
24    pub from: String,
25    pub sms: String,
26    #[serde(rename = "type")]
27    pub message_type: MessageType,
28    pub channel: Channel,
29    pub media: Option<Media>,
30    api_key: Option<String>,
31}
32
33impl MessageRequest {
34    pub fn new(
35        to: String,
36        from: String,
37        sms: String,
38        message_type: MessageType,
39        channel: Channel,
40    ) -> MessageRequest {
41        MessageRequest {
42            to,
43            from,
44            sms,
45            message_type,
46            channel,
47            media: None,
48            api_key: None,
49        }
50    }
51
52    pub(crate) fn set_api_key(&mut self, api_key: &str) {
53        self.api_key = Some(api_key.to_string());
54    }
55}
56
57#[derive(Serialize, Deserialize, Debug)]
58pub struct MessageBulkRequest {
59    pub to: Vec<String>,
60    pub from: String,
61    pub sms: String,
62    #[serde(rename = "type")]
63    pub message_type: MessageType,
64    pub channel: Channel,
65    api_key: Option<String>,
66}
67
68impl MessageBulkRequest {
69    pub fn new(
70        to: Vec<String>,
71        from: String,
72        sms: String,
73        message_type: MessageType,
74        channel: Channel,
75    ) -> MessageBulkRequest {
76        MessageBulkRequest {
77            to,
78            from,
79            sms,
80            message_type,
81            channel,
82            api_key: None,
83        }
84    }
85
86    pub(crate) fn set_api_key(&mut self, api_key: &str) {
87        self.api_key = Some(api_key.to_string());
88    }
89}
90
91#[derive(Serialize, Deserialize, Debug)]
92pub struct MessageBulkResponse {
93    pub code: String,
94    pub message_id: String,
95    pub message: String,
96    pub balance: f64,
97    pub user: String,
98}
99
100#[derive(Serialize, Deserialize, Debug)]
101pub struct Media {
102    pub url: String,
103    pub caption: String,
104}
105
106#[derive(Serialize, Deserialize, Debug)]
107pub enum MessageType {
108    #[serde(rename = "plain")]
109    Plain,
110}
111
112#[derive(Serialize, Deserialize, Debug)]
113pub enum Channel {
114    #[serde(rename = "generic")]
115    Generic,
116    #[serde(rename = "dnd")]
117    Dnd,
118    #[serde(rename = "whatsapp")]
119    Whatsapp,
120}