Skip to main content

hac_core/net/
request_client.rs

1use crate::collection::types::Request;
2
3#[derive(Debug)]
4pub struct RequestClient {
5    client: reqwest::Client,
6}
7
8impl RequestClient {
9    pub fn new() -> Self {
10        RequestClient {
11            client: reqwest::Client::new(),
12        }
13    }
14
15    pub fn get(&self, request: &Request) -> reqwest::RequestBuilder {
16        let request_builder = self.client.get(&request.uri);
17        self.append_headers(request, request_builder)
18    }
19
20    pub fn post(&self, request: &Request) -> reqwest::RequestBuilder {
21        let request_builder = self.client.post(&request.uri);
22        self.append_headers(request, request_builder)
23    }
24
25    pub fn put(&self, request: &Request) -> reqwest::RequestBuilder {
26        let request_builder = self.client.put(&request.uri);
27        self.append_headers(request, request_builder)
28    }
29
30    pub fn patch(&self, request: &Request) -> reqwest::RequestBuilder {
31        let request_builder = self.client.patch(&request.uri);
32        self.append_headers(request, request_builder)
33    }
34
35    pub fn delete(&self, request: &Request) -> reqwest::RequestBuilder {
36        let request_builder = self.client.delete(&request.uri);
37        self.append_headers(request, request_builder)
38    }
39
40    fn append_headers(
41        &self,
42        request: &Request,
43        mut request_builder: reqwest::RequestBuilder,
44    ) -> reqwest::RequestBuilder {
45        if let Some(ref headers) = request.headers {
46            for header in headers.iter().filter(|header| header.enabled) {
47                let header_name = header.pair.0.clone();
48                let header_value = header.pair.1.clone();
49                request_builder = request_builder.header(header_name, header_value);
50            }
51        }
52
53        request_builder
54    }
55}
56
57impl Default for RequestClient {
58    fn default() -> Self {
59        Self::new()
60    }
61}