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::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    /// execute request without authorization
27    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    /// execute request with authorization
35    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}