1use http_request_derive::HttpRequest;
7use http_request_derive_client::Client as _;
8use http_request_derive_client_reqwest::{ReqwestClient, ReqwestClientError};
9use url::Url;
10
11use crate::{AuthenticatedClient, Authorization};
12
13mod requests;
14
15#[derive(Debug, Clone)]
16pub struct Client {
17 inner: ReqwestClient,
18}
19
20impl Client {
21 pub fn new(base_url: Url) -> Self {
22 let inner = ReqwestClient::new(base_url);
23 Self { inner }
24 }
25
26 pub async fn execute<R: HttpRequest + Send>(
28 &self,
29 request: R,
30 ) -> Result<R::Response, ReqwestClientError> {
31 self.inner.execute(request).await
32 }
33
34 pub async fn execute_authorized<R: HttpRequest + Send, A: Authorization + Sync>(
36 &self,
37 request: R,
38 authorization: A,
39 ) -> Result<R::Response, ReqwestClientError> {
40 let authenticated_client = AuthenticatedClient::new(self.inner.clone(), authorization);
41 authenticated_client.execute(request).await
42 }
43}