seven_client/
contacts.rs

1use crate::{client::Client};
2use ureq::{Error, Request};
3use serde::{Deserialize};
4
5#[derive(Deserialize)]
6pub struct Contact {
7    #[serde(rename = "ID")]
8    pub id: String,
9    #[serde(rename = "Name")]
10    pub name: String,
11    #[serde(rename = "Number")]
12    pub number: String,
13}
14
15#[derive(Default)]
16pub struct ContactDeleteParams {
17    pub id: u32,
18}
19
20#[derive(Default)]
21pub struct ContactsReadParams {
22    pub id: Option<u32>,
23}
24
25#[derive(Default)]
26pub struct ContactEditParams {
27    pub empfaenger: Option<String>,
28    pub id: u32,
29    pub nick: Option<String>,
30}
31
32#[derive(Debug, Deserialize)]
33pub struct ContactWriteResponse {
34    pub id: u64,
35    #[serde(rename = "return")]
36    pub return_: String,
37}
38
39#[derive(Debug, Deserialize)]
40pub struct ContactEditResponse {
41    #[serde(rename = "return")]
42    pub return_: String,
43}
44
45pub struct Contacts {
46    client: Client
47}
48
49impl Contacts {
50    pub fn new(client: Client) -> Self {
51        Contacts {
52            client,
53        }
54    }
55
56    pub fn request(&self, method: &str, action: &str) -> Request {
57        let req = self.client.request(method, "contacts").clone();
58
59        req.query("action", action)
60    }
61
62    pub fn read(&self, params: ContactsReadParams) -> Result<String, Error> {
63        Ok(self.request("GET", "read")
64            .query("id", &*params.id.unwrap_or_default().to_string())
65            .call()?.into_string()?)
66    }
67
68    pub fn read_json(&self, params: ContactsReadParams) -> Result<Vec<Contact>, Error> {
69        Ok(self.request("GET", "read")
70            .query("id", &*params.id.unwrap_or_default().to_string())
71            .query("json", "1")
72            .call()?.into_json::<Vec<Contact>>()?)
73    }
74
75    fn _write(&self, json: bool, _params: Option<ContactEditParams>) -> Request {
76        let mut req = self.request("GET", "write").clone();
77
78        if !_params.is_none() {
79            let params = _params.unwrap();
80
81            if params.nick.is_none() {
82                req = req.query("nick", &*params.nick.unwrap_or_default().to_string());
83            }
84
85            if params.empfaenger.is_none() {
86                req = req.query(
87                    "empfaenger", &*params.empfaenger.unwrap_or_default().to_string());
88            }
89
90            req = req.query("id", &*params.id.to_string());
91        }
92
93        if json {
94            req = req.query("json", "1");
95        }
96
97        req
98    }
99
100    pub fn create(&self) -> Result<String, Error> {
101        Ok(self._write(false, None).call()?.into_string()?)
102    }
103
104    pub fn create_json(&self) -> Result<ContactWriteResponse, Error> {
105        Ok(self._write(true, None).call()?
106            .into_json::<ContactWriteResponse>()?)
107    }
108
109    pub fn edit(&self, params: ContactEditParams) -> Result<String, Error> {
110        Ok(self._write(false, Option::from(params))
111            .call()?.into_string()?)
112    }
113
114    pub fn edit_json(&self, params: ContactEditParams) -> Result<ContactEditResponse, Error> {
115        Ok(self._write(true, Option::from(params))
116            .call()?.into_json::<ContactEditResponse>()?)
117    }
118
119    pub fn delete(&self, params: ContactDeleteParams) -> Result<u8, Error> {
120        Ok(self.request("POST", "del")
121            .query("id", &*params.id.to_string()).call()?.into_json::<u8>()?)
122    }
123}