1use crate::{data::Data, parameter::Parameter, response::Response, MailerLite, BASE_PATH};
2
3const END_POINT: &str = "forms";
4
5#[derive(Debug)]
6pub struct Form {
7 mailerlite: MailerLite,
8}
9
10impl Form {
11 pub fn new(mailerlite: MailerLite) -> Self {
12 Self { mailerlite }
13 }
14
15 pub async fn get(&self, form_type: String, query: Parameter) -> Response {
16 let url: String = format!("{}{}/{}", BASE_PATH, END_POINT, form_type);
17
18 Response::new(
19 self.mailerlite
20 .client
21 .request
22 .get(url)
23 .query(&query.data)
24 .send()
25 .await
26 .expect("Failed to send request"),
27 )
28 .await
29 }
30
31 pub async fn find(&self, id: String) -> Response {
32 let url: String = format!("{}{}/{}", BASE_PATH, END_POINT, id);
33
34 Response::new(
35 self.mailerlite
36 .client
37 .request
38 .get(url)
39 .send()
40 .await
41 .expect("Failed to send request"),
42 )
43 .await
44 }
45
46 pub async fn update(&self, id: String, form: Data) -> Response {
47 let url: String = format!("{}{}/{}", BASE_PATH, END_POINT, id);
48
49 Response::new(
50 self.mailerlite
51 .client
52 .request
53 .put(url)
54 .form(&form.data)
55 .send()
56 .await
57 .expect("Failed to send request"),
58 )
59 .await
60 }
61
62 pub async fn delete(&self, id: String) -> Response {
63 let url: String = format!("{}{}/{}", BASE_PATH, END_POINT, id);
64
65 Response::new(
66 self.mailerlite
67 .client
68 .request
69 .delete(url)
70 .send()
71 .await
72 .expect("Failed to send request"),
73 )
74 .await
75 }
76
77 pub async fn get_subscribers(&self, id: String, query: Parameter) -> Response {
78 let url: String = format!("{}{}/{}/subscribers", BASE_PATH, END_POINT, id);
79
80 Response::new(
81 self.mailerlite
82 .client
83 .request
84 .get(url)
85 .query(&query.data)
86 .send()
87 .await
88 .expect("Failed to send request"),
89 )
90 .await
91 }
92}