clientix_core/client/asynchronous/
client.rs

1use std::sync::{Arc, Mutex};
2use http::Method;
3use reqwest::Client as ReqwestClient;
4use crate::client::asynchronous::request::AsyncRequestBuilder;
5use crate::client::ClientConfig;
6
7#[derive(Clone)]
8pub struct AsyncClient {
9    pub client: Arc<Mutex<ReqwestClient>>,
10    pub url: String,
11    pub path: String
12}
13
14impl AsyncClient {
15
16    pub fn get(&self) -> AsyncRequestBuilder {
17        AsyncRequestBuilder::builder(self.clone(), Method::GET)
18    }
19
20    pub fn post(&self) -> AsyncRequestBuilder {
21        AsyncRequestBuilder::builder(self.clone(), Method::POST)
22    }
23
24    pub fn put(&self) -> AsyncRequestBuilder {
25        AsyncRequestBuilder::builder(self.clone(), Method::PUT)
26    }
27
28    pub fn delete(&self) -> AsyncRequestBuilder {
29        AsyncRequestBuilder::builder(self.clone(), Method::DELETE)
30    }
31    
32    pub fn head(&self) -> AsyncRequestBuilder {
33        AsyncRequestBuilder::builder(self.clone(), Method::HEAD)
34    }
35    
36    pub fn options(&self) -> AsyncRequestBuilder {
37        AsyncRequestBuilder::builder(self.clone(), Method::OPTIONS)
38    }
39    
40    pub fn patch(&self) -> AsyncRequestBuilder {
41        AsyncRequestBuilder::builder(self.clone(), Method::PATCH)
42    }
43
44}
45
46impl From<ClientConfig> for AsyncClient {
47
48    fn from(config: ClientConfig) -> Self {
49        let mut client = ReqwestClient::builder();
50
51        if let Some(user_agent) = config.user_agent {
52            client = client.user_agent(user_agent.clone());
53        }
54
55        if !config.headers.is_empty() {
56            client = client.default_headers(config.headers.clone());
57        }
58
59        if let Some(timeout) = config.timeout {
60            client = client.timeout(timeout);
61        }
62
63        if let Some(connect_timeout) = config.connect_timeout {
64            client = client.connect_timeout(connect_timeout);
65        }
66
67        client = client.connection_verbose(config.connection_verbose);
68
69        let url = config.url.expect("missing url");
70        let path = config.path.unwrap_or(String::new());
71        let client = Arc::new(Mutex::new(client.build().expect("failed to build async client")));
72
73        AsyncClient { client, url, path }
74    }
75
76}