Skip to main content

LocalAsyncTransport

Trait LocalAsyncTransport 

Source
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§

Source

type Error

Transport-specific failure.

Required Methods§

Source

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,

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".

Implementors§