1use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, PartialEq, Default, Debug, Clone, Copy)]
11pub struct HttpPaginationOptions {
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub limit: Option<u64>,
15
16 #[serde(skip_serializing_if = "Option::is_none")]
20 pub offset: Option<u64>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
25 pub reverse: Option<bool>,
26}
27impl HttpPaginationOptions {
28 #[must_use]
30 pub fn with_limit(mut self, limit: u64) -> Self {
31 self.limit = Some(limit);
32 self
33 }
34
35 #[must_use]
37 pub fn with_offset(mut self, offset: u64) -> Self {
38 self.offset = Some(offset);
39 self
40 }
41
42 #[must_use]
44 pub fn with_reverse(mut self, reverse: bool) -> Self {
45 self.reverse = Some(reverse);
46 self
47 }
48
49 pub fn add_to_body(&self, body: &mut serde_json::Value) {
51 if let Some(limit) = self.limit {
52 body["limit"] = serde_json::json!(limit);
53 }
54 if let Some(offset) = self.offset {
55 body["offset"] = serde_json::json!(offset);
56 }
57 if let Some(reverse) = self.reverse {
58 body["reverse"] = serde_json::json!(reverse);
59 }
60 }
61}
62
63#[derive(Deserialize, PartialEq, Debug, Clone, Copy)]
65pub struct HttpSmsSendResponse {
66 pub message_id: i64,
68
69 pub reference_id: u8,
71}
72
73impl From<(crate::sms::SmsOutgoingMessage, HttpSmsSendResponse)> for crate::sms::SmsMessage {
75 fn from(
76 value: (crate::sms::SmsOutgoingMessage, HttpSmsSendResponse),
77 ) -> crate::sms::SmsMessage {
78 crate::sms::SmsMessage {
79 message_id: Some(value.1.message_id),
80 phone_number: value.0.to,
81 message_content: value.0.content,
82 message_reference: Some(value.1.reference_id),
83 is_outgoing: true,
84 status: None,
85 created_at: None,
86 completed_at: None,
87 }
88 }
89}
90
91#[derive(Deserialize, PartialEq, Debug, Clone, Copy)]
93pub struct HttpModemNetworkStatusResponse {
94 pub registration: u8,
96
97 pub technology: u8,
99}
100
101#[derive(Deserialize, PartialEq, Debug, Clone, Copy)]
103pub struct HttpModemSignalStrengthResponse {
104 pub rssi: u8,
106
107 pub ber: u8,
109}
110
111#[derive(Deserialize, PartialEq, Debug, Clone)]
113pub struct HttpModemNetworkOperatorResponse {
114 pub status: u8,
116
117 pub format: u8,
119
120 pub operator: String,
122}
123
124#[derive(Deserialize, PartialEq, Debug, Clone, Copy)]
126pub struct HttpModemBatteryLevelResponse {
127 pub status: u8,
129
130 pub charge: u8,
132
133 pub voltage: f32,
135}
136
137#[derive(Deserialize, PartialEq, Debug, Clone)]
139pub struct HttpSmsDeviceInfoResponse {
140 pub version: String,
142
143 pub phone_number: Option<String>,
145
146 pub service_provider: Option<String>,
148
149 pub network_operator: Option<(u8, u8, String)>,
151
152 pub network_status: Option<(u8, u8)>,
154
155 pub battery: Option<(u8, u8, f32)>,
157
158 pub signal: Option<(u8, u8)>,
160}
161
162#[derive(Deserialize, PartialEq, Debug, Clone)]
164pub struct HttpSmsDeviceInfoData {
165 pub version: String,
167
168 pub phone_number: Option<String>,
170
171 pub service_provider: Option<String>,
173
174 pub network_operator: Option<HttpModemNetworkOperatorResponse>,
176
177 pub network_status: Option<HttpModemNetworkStatusResponse>,
179
180 pub battery: Option<HttpModemBatteryLevelResponse>,
182
183 pub signal: Option<HttpModemSignalStrengthResponse>,
185}
186impl From<HttpSmsDeviceInfoResponse> for HttpSmsDeviceInfoData {
187 fn from(value: HttpSmsDeviceInfoResponse) -> HttpSmsDeviceInfoData {
188 HttpSmsDeviceInfoData {
189 version: value.version,
190 phone_number: value.phone_number,
191 service_provider: value.service_provider,
192 network_operator: value
193 .network_operator
194 .map(|v| HttpModemNetworkOperatorResponse {
195 status: v.0,
196 format: v.1,
197 operator: v.2,
198 }),
199 network_status: value
200 .network_status
201 .map(|v| HttpModemNetworkStatusResponse {
202 registration: v.0,
203 technology: v.1,
204 }),
205 battery: value.battery.map(|v| HttpModemBatteryLevelResponse {
206 status: v.0,
207 charge: v.1,
208 voltage: v.2,
209 }),
210 signal: value.signal.map(|v| HttpModemSignalStrengthResponse {
211 rssi: v.0,
212 ber: v.1,
213 }),
214 }
215 }
216}
217
218pub type LatestNumberFriendlyNamePair = (String, Option<String>);