Skip to main content

pib_client/
client.rs

1// SPDX-FileCopyrightText: Politik im Blick developers
2// SPDX-FileCopyrightText: Wolfgang Silbermayr <wolfgang@silbermayr.at>
3//
4// SPDX-License-Identifier: AGPL-3.0-or-later OR EUPL-1.2
5
6use 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}