seven_client/
journal.rs

1use crate::client::Client;
2use ureq::{Error, Request};
3use serde::{Deserialize};
4
5#[derive(Deserialize)]
6pub struct JournalInbound {
7    pub from: String,
8    pub id: String,
9    pub price: String,
10    pub text: String,
11    pub timestamp: String,
12    pub to: String,
13}
14
15#[derive(Deserialize)]
16pub struct JournalOutbound {
17    pub connection: String,
18    pub dlr: Option<String>,
19    pub dlr_timestamp: Option<String>,
20    pub foreign_id: Option<String>,
21    pub from: String,
22    pub id: String,
23    pub label: Option<String>,
24    pub latency: Option<String>,
25    pub mccmnc: Option<String>,
26    pub price: String,
27    pub text: String,
28    pub timestamp: String,
29    pub to: String,
30    #[serde(rename = "type")]
31    pub type_: String,
32}
33
34#[derive(Default)]
35pub struct JournalParams {
36    pub date_from: Option<String>,
37    pub date_to: Option<String>,
38    pub id: Option<u64>,
39    pub state: Option<String>,
40    pub to: Option<String>,
41}
42
43#[derive(Deserialize)]
44pub struct JournalReplies {
45    pub from: String,
46    pub id: String,
47    pub price: String,
48    pub text: String,
49    pub timestamp: String,
50    pub to: String,
51}
52
53#[derive(Deserialize)]
54pub struct JournalVoice {
55    pub duration: String,
56    pub error: String,
57    pub from: String,
58    pub id: String,
59    pub price: String,
60    pub status: String,
61    pub text: String,
62    pub timestamp: String,
63    pub to: String,
64    pub xml: bool,
65}
66
67pub struct Journal {
68    client: Client
69}
70
71impl Journal {
72    pub fn new(client: Client) -> Self {
73        Journal {
74            client,
75        }
76    }
77
78    pub fn get(&self, params: JournalParams, type_: &str) -> Request {
79        let mut req = self.client.request("GET", "journal").clone();
80
81        if params.id.is_some() {
82            req = req.query("id", &*params.id.unwrap_or_default().to_string());
83        }
84        if params.date_from.is_some() {
85            req = req.query("date_from", &*params.date_from.unwrap_or_default());
86        }
87        if params.date_to.is_some() {
88            req = req.query("date_to", &*params.date_to.unwrap_or_default());
89        }
90        if params.to.is_some() {
91            req = req.query("to", &*params.to.unwrap_or_default());
92        }
93        if params.state.is_some() {
94            req = req.query("state", &*params.state.unwrap_or_default());
95        }
96
97        req.query("type", type_)
98    }
99
100    pub fn inbound(&self, params: JournalParams) -> Result<Vec<JournalInbound>, Error> {
101        Ok(self.get(params, "inbound").call()?.into_json::<Vec<JournalInbound>>()?)
102    }
103
104    pub fn outbound(&self, params: JournalParams) -> Result<Vec<JournalOutbound>, Error> {
105        Ok(self.get(params, "outbound").call()?.into_json::<Vec<JournalOutbound>>()?)
106    }
107
108    pub fn replies(&self, params: JournalParams) -> Result<Vec<JournalReplies>, Error> {
109        Ok(self.get(params, "replies").call()?.into_json::<Vec<JournalReplies>>()?)
110    }
111
112    pub fn voice(&self, params: JournalParams) -> Result<Vec<JournalVoice>, Error> {
113        Ok(self.get(params, "voice").call()?.into_json::<Vec<JournalVoice>>()?)
114    }
115}