Skip to main content

cloud_sdk_reqwest/asynchronous/
raw.rs

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