seven_client/
analytics.rs

1use crate::{client::Client, to_string};
2use ureq::{Error, Request};
3use serde::{Deserialize};
4
5#[derive(Default)]
6pub struct AnalyticsParams {
7    pub end: Option<String>,
8    pub label: Option<String>,
9    pub start: Option<String>,
10    pub subaccounts: Option<String>,
11}
12
13#[derive(Debug, Deserialize)]
14pub struct AnalyticByCountry {
15    #[serde(deserialize_with = "to_string")]
16    pub country: String,
17    pub hlr: u32,
18    pub inbound: u32,
19    pub mnp: u32,
20    pub sms: u32,
21    pub usage_eur: f64,
22    pub voice: u32,
23}
24
25#[derive(Debug, Deserialize)]
26pub struct AnalyticByDate {
27    pub date: String,
28    pub hlr: u32,
29    pub inbound: u32,
30    pub mnp: u32,
31    pub sms: u32,
32    pub usage_eur: f64,
33    pub voice: u32,
34}
35
36#[derive(Debug, Deserialize)]
37pub struct AnalyticByLabel {
38    pub hlr: u32,
39    pub inbound: u32,
40    #[serde(deserialize_with = "to_string")]
41    pub label: String,
42    pub mnp: u32,
43    pub sms: u32,
44    pub usage_eur: f64,
45    pub voice: u32,
46}
47
48#[derive(Debug, Deserialize)]
49pub struct AnalyticBySubaccount {
50    pub account: String,
51    pub hlr: u32,
52    pub inbound: u32,
53    pub mnp: u32,
54    pub sms: u32,
55    pub usage_eur: f64,
56    pub voice: u32,
57}
58
59pub struct Analytics {
60    client: Client
61}
62
63impl Analytics {
64    pub fn new(client: Client) -> Self {
65        Analytics {
66            client,
67        }
68    }
69
70    pub fn get(&self, params: AnalyticsParams, group_by: &str) -> Request {
71        let mut req = self.client.request("GET", "analytics").clone();
72
73        if params.end.is_some() {
74            req = req.query("end", &*params.end.unwrap_or_default());
75        }
76        if params.label.is_some() {
77            req = req.query("label", &*params.label.unwrap_or_default());
78        }
79        if params.start.is_some() {
80            req = req.query("start", &*params.start.unwrap_or_default());
81        }
82        if params.subaccounts.is_some() {
83            req = req.query("subaccounts", &*params.subaccounts.unwrap_or_default());
84        }
85
86        req.query("group_by", group_by)
87    }
88
89    pub fn group_by_country(&self, params: AnalyticsParams) -> Result<Vec<AnalyticByCountry>, Error> {
90        let res = self.get(params, "country").call()?.into_json::<Vec<AnalyticByCountry>>()?;
91        Ok(res)
92    }
93
94    pub fn group_by_date(&self, params: AnalyticsParams) -> Result<Vec<AnalyticByDate>, Error> {
95        let res = self.get(params, "date").call()?.into_json::<Vec<AnalyticByDate>>()?;
96        Ok(res)
97    }
98
99    pub fn group_by_label(&self, params: AnalyticsParams) -> Result<Vec<AnalyticByLabel>, Error> {
100        let res = self.get(params, "label").call()?.into_json::<Vec<AnalyticByLabel>>()?;
101        Ok(res)
102    }
103
104    pub fn group_by_subaccount(&self, params: AnalyticsParams) -> Result<Vec<AnalyticBySubaccount>, Error> {
105        let res = self.get(params, "subaccount").call()?.into_json::<Vec<AnalyticBySubaccount>>()?;
106        Ok(res)
107    }
108}