Skip to main content

cloud_sdk_reqwest/asynchronous/
raw.rs

1use core::fmt;
2
3use cloud_sdk::transport::{
4    AsyncRawHttpExecutor, AsyncResponseStaging, BoundTransport, EndpointIdentity,
5    EndpointIdentityError, RawResponsePolicy, ResponseCompletion, ResponseStorageSanitizer,
6    TransportRequest,
7};
8use cloud_sdk_sanitization::sanitize_bytes;
9use http::header::HeaderValue;
10
11use crate::shared::{HttpsEndpoint, RawHyperClient, RawTransportFailure};
12
13/// Raw async HTTP executor with no implicit authentication or provider policy.
14#[derive(Clone)]
15pub struct RawAsyncClient {
16    inner: RawHyperClient,
17    endpoint: HttpsEndpoint,
18}
19
20impl RawAsyncClient {
21    pub(super) const fn new(inner: RawHyperClient, endpoint: HttpsEndpoint) -> Self {
22        Self { inner, endpoint }
23    }
24
25    pub(crate) async fn execute_authenticated<'writer, 'buffer>(
26        &self,
27        request: TransportRequest<'_>,
28        policy: RawResponsePolicy<'_>,
29        authorization: HeaderValue,
30        mut response: AsyncResponseStaging<'writer, 'buffer>,
31    ) -> Result<ResponseCompletion, RawTransportFailure> {
32        self.inner
33            .execute_authenticated(request, policy, authorization, &mut response)
34            .await
35    }
36}
37
38impl AsyncRawHttpExecutor for RawAsyncClient {
39    type Error = RawTransportFailure;
40
41    async fn execute<'executor, 'request, 'policy, 'writer, 'buffer>(
42        &'executor self,
43        request: TransportRequest<'request>,
44        policy: RawResponsePolicy<'policy>,
45        mut response: AsyncResponseStaging<'writer, 'buffer>,
46    ) -> Result<ResponseCompletion, Self::Error>
47    where
48        'executor: 'writer,
49        'request: 'writer,
50        'policy: 'writer,
51        'buffer: 'writer,
52    {
53        self.inner.execute(request, policy, &mut response).await
54    }
55}
56
57impl ResponseStorageSanitizer for RawAsyncClient {
58    fn sanitize_response_storage(&self, response_storage: &mut [u8]) {
59        sanitize_bytes(response_storage);
60    }
61}
62
63impl BoundTransport for RawAsyncClient {
64    fn endpoint_identity(&self) -> Result<EndpointIdentity<'_>, EndpointIdentityError> {
65        self.endpoint.identity()
66    }
67}
68
69impl fmt::Debug for RawAsyncClient {
70    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
71        formatter
72            .debug_struct("RawAsyncClient")
73            .field("endpoint", &"[redacted]")
74            .finish_non_exhaustive()
75    }
76}