pub trait LocalAsyncTransport {
type Error;
// Required method
fn send_local<'transport, 'request, 'writer, 'buffer>(
&'transport self,
request: TransportRequest<'request>,
response: AsyncResponseStaging<'writer, 'buffer>,
) -> impl Future<Output = Result<ResponseCompletion, Self::Error>> + 'writer
where 'transport: 'writer,
'request: 'writer,
'buffer: 'writer;
}Expand description
Local asynchronous transport for !Send futures and executors.
Implementations receive a non-committing staging view and return completion
metadata. drive_local owns the cleanup attempt across the await and
commits only after Ready(Ok). Cancellation clears partial response state
and remains conservatively DeliveryPhase::PossiblySent.
A local implementation may deliberately return a future that is not
Send:
ⓘ
use core::cell::Cell;
use cloud_sdk::transport::{
AsyncResponseStaging, LocalAsyncTransport, ResponseCompletion,
ResponseMetadata, StatusCode, TransportRequest,
};
struct Local(Cell<()>);
impl LocalAsyncTransport for Local {
type Error = ();
fn send_local<'transport, 'request, 'writer, 'buffer>(
&'transport self,
_request: TransportRequest<'request>,
_response: AsyncResponseStaging<'writer, 'buffer>,
) -> impl core::future::Future<Output = Result<ResponseCompletion, Self::Error>> + 'writer
where
'transport: 'writer,
'request: 'writer,
'buffer: 'writer,
{
async move {
self.0.get();
Ok(ResponseCompletion::new(
StatusCode::NO_CONTENT,
0,
ResponseMetadata::EMPTY,
))
}
}
}
fn require_send<T: Send>(_: T) {}
fn reject_send<'a, 'buffer: 'a>(
transport: &'a Local,
request: TransportRequest<'a>,
response: AsyncResponseStaging<'a, 'buffer>,
) {
require_send(transport.send_local(request, response));
}Required Associated Types§
Required Methods§
Sourcefn send_local<'transport, 'request, 'writer, 'buffer>(
&'transport self,
request: TransportRequest<'request>,
response: AsyncResponseStaging<'writer, 'buffer>,
) -> impl Future<Output = Result<ResponseCompletion, Self::Error>> + 'writerwhere
'transport: 'writer,
'request: 'writer,
'buffer: 'writer,
fn send_local<'transport, 'request, 'writer, 'buffer>(
&'transport self,
request: TransportRequest<'request>,
response: AsyncResponseStaging<'writer, 'buffer>,
) -> impl Future<Output = Result<ResponseCompletion, Self::Error>> + 'writerwhere
'transport: 'writer,
'request: 'writer,
'buffer: 'writer,
Stages one response without requiring the returned future to be Send.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".