cloud_sdk/transport/raw/
local_async.rs1use core::future::Future;
2
3use super::{AsyncRawHttpExecutor, RawResponsePolicy};
4use crate::transport::{
5 AsyncExecutionError, AsyncResponseStaging, ResponseCompletion, ResponseWriter, TransportRequest,
6};
7
8pub trait LocalAsyncRawHttpExecutor {
10 type Error;
12
13 fn execute_local<'executor, 'request, 'policy, 'writer, 'buffer>(
15 &'executor self,
16 request: TransportRequest<'request>,
17 policy: RawResponsePolicy<'policy>,
18 response: AsyncResponseStaging<'writer, 'buffer>,
19 ) -> impl Future<Output = Result<ResponseCompletion, Self::Error>> + 'writer
20 where
21 'executor: 'writer,
22 'request: 'writer,
23 'policy: 'writer,
24 'buffer: 'writer;
25}
26
27pub async fn drive_local_raw<'executor, 'request, 'policy, 'writer, 'buffer, T>(
29 executor: &'executor T,
30 request: TransportRequest<'request>,
31 policy: RawResponsePolicy<'policy>,
32 response: &'writer mut ResponseWriter<'buffer>,
33) -> Result<(), AsyncExecutionError<T::Error>>
34where
35 T: LocalAsyncRawHttpExecutor + ?Sized,
36 'executor: 'writer,
37 'request: 'writer,
38 'policy: 'writer,
39 'buffer: 'writer,
40{
41 let mut attempt = response
42 .begin_attempt()
43 .map_err(AsyncExecutionError::Response)?;
44 let completion = executor
45 .execute_local(request, policy, attempt.staging())
46 .await
47 .map_err(AsyncExecutionError::Transport)?;
48 attempt
49 .commit_completion(completion)
50 .map_err(AsyncExecutionError::Response)
51}
52
53impl<T> LocalAsyncRawHttpExecutor for T
54where
55 T: AsyncRawHttpExecutor + ?Sized,
56{
57 type Error = T::Error;
58
59 async fn execute_local<'executor, 'request, 'policy, 'writer, 'buffer>(
60 &'executor self,
61 request: TransportRequest<'request>,
62 policy: RawResponsePolicy<'policy>,
63 response: AsyncResponseStaging<'writer, 'buffer>,
64 ) -> Result<ResponseCompletion, Self::Error>
65 where
66 'executor: 'writer,
67 'request: 'writer,
68 'policy: 'writer,
69 'buffer: 'writer,
70 {
71 AsyncRawHttpExecutor::execute(self, request, policy, response).await
72 }
73}