seven_client/
analytics.rs1use 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}