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, IsAuthenticated};
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
31impl IsAuthenticated for Client {
32    fn is_authenticated(&self) -> bool {
33        false
34    }
35}
36
37#[async_trait::async_trait(?Send)]
38impl http_request_derive_client::Client for Client {
39    type ClientError = ReqwestClientError;
40
41    async fn execute<R: HttpRequest + Send>(
42        &self,
43        request: R,
44    ) -> Result<R::Response, Self::ClientError> {
45        self.inner.execute(request).await
46    }
47}