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}