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