seven_client/
sms.rs

1use crate::client::Client;
2use ureq::{Error};
3use serde::{Deserialize};
4
5const ENDPOINT: &str = "sms";
6
7pub struct SmsJsonParams {
8    pub debug: Option<bool>,
9    pub delay: Option<String>,
10    pub flash: Option<bool>,
11    pub foreign_id: Option<String>,
12    pub from: Option<String>,
13    pub label: Option<String>,
14    pub no_reload: Option<bool>,
15    pub text: String,
16    pub to: String,
17    pub unicode: Option<bool>,
18    pub udh: Option<String>,
19    pub utf8: Option<bool>,
20    pub ttl: Option<u32>,
21    pub performance_tracking: Option<bool>,
22}
23
24#[derive(Deserialize)]
25pub struct SmsJsonResponse {
26    pub balance: f64,
27    pub debug: String,
28    pub messages: Vec<SmsMessage>,
29    pub sms_type: String,
30    pub success: String,
31    pub total_price: f64,
32}
33
34#[derive(Deserialize)]
35pub struct SmsMessage {
36    pub encoding: String,
37    pub error: Option<String>,
38    pub error_text: Option<String>,
39    pub id: Option<String>,
40    pub messages: Option<Vec<String>>,
41    pub parts: u16,
42    pub price: f64,
43    pub recipient: String,
44    pub sender: String,
45    pub success: bool,
46    pub text: String,
47}
48
49pub struct SmsTextParams {
50    pub debug: Option<bool>,
51    pub delay: Option<String>,
52    pub details: Option<bool>,
53    pub flash: Option<bool>,
54    pub foreign_id: Option<String>,
55    pub from: Option<String>,
56    pub label: Option<String>,
57    pub no_reload: Option<bool>,
58    pub text: String,
59    pub to: String,
60    pub unicode: Option<bool>,
61    pub udh: Option<String>,
62    pub utf8: Option<bool>,
63    pub ttl: Option<u32>,
64    pub performance_tracking: Option<bool>,
65    pub return_msg_id: Option<bool>,
66}
67
68pub struct Sms {
69    client: Client
70}
71
72impl Sms {
73    pub fn new(client: Client) -> Self {
74        Sms {
75            client,
76        }
77    }
78
79    pub fn text(&self, params: SmsTextParams) -> Result<String, Error> {
80        Ok(self.client.request("POST", ENDPOINT)
81            .send_form(&[
82                ("debug", self.client.bool_to_string(params.debug.unwrap_or_default())),
83                ("delay", &*params.delay.unwrap_or_default()),
84                ("details", self.client.bool_to_string(params.details.unwrap_or_default())),
85                ("flash", self.client.bool_to_string(params.flash.unwrap_or_default())),
86                ("foreign_id", &*params.foreign_id.unwrap_or_default()),
87                ("from", &*params.from.unwrap_or_default()),
88                ("label", &*params.label.unwrap_or_default()),
89                ("no_reload", self.client.bool_to_string(params.no_reload.unwrap_or_default())),
90                ("performance_tracking", self.client.bool_to_string(params.performance_tracking.unwrap_or_default())),
91                ("return_msg_id", self.client.bool_to_string(params.return_msg_id.unwrap_or_default())),
92                ("text", &*params.text),
93                ("to", &*params.to),
94                ("ttl", &*params.ttl.unwrap_or_default().to_string()),
95                ("udh", &*params.udh.unwrap_or_default()),
96                ("unicode", self.client.bool_to_string(params.unicode.unwrap_or_default())),
97                ("utf8", self.client.bool_to_string(params.utf8.unwrap_or_default())),
98            ])?
99            .into_string()?)
100    }
101
102    pub fn json(&self, params: SmsJsonParams) -> Result<SmsJsonResponse, Error> {
103        Ok(self.client.request("POST", ENDPOINT)
104            .send_form(&[
105                ("debug", self.client.bool_to_string(params.debug.unwrap_or_default())),
106                ("delay", &*params.delay.unwrap_or_default()),
107                ("flash", self.client.bool_to_string(params.flash.unwrap_or_default())),
108                ("foreign_id", &*params.foreign_id.unwrap_or_default()),
109                ("from", &*params.from.unwrap_or_default()),
110                ("json", self.client.bool_to_string(true)),
111                ("label", &*params.label.unwrap_or_default()),
112                ("no_reload", self.client.bool_to_string(params.no_reload.unwrap_or_default())),
113                ("performance_tracking", self.client.bool_to_string(params.performance_tracking.unwrap_or_default())),
114                ("text", &*params.text),
115                ("to", &*params.to),
116                ("ttl", &*params.ttl.unwrap_or_default().to_string()),
117                ("udh", &*params.udh.unwrap_or_default()),
118                ("unicode", self.client.bool_to_string(params.unicode.unwrap_or_default())),
119                ("utf8", self.client.bool_to_string(params.utf8.unwrap_or_default())),
120            ])?
121            .into_json::<SmsJsonResponse>()?)
122    }
123}