Skip to main content

XmtpMlsBidiStreams

Trait XmtpMlsBidiStreams 

Source
pub trait XmtpMlsBidiStreams: MaybeSend + MaybeSync {
    type SubscribeStream: Stream<Item = Result<SubscribeResponse, Self::Error>> + MaybeSend;
    type Error: RetryableError + 'static;

    // Required methods
    fn host(&self) -> &str;
    fn subscribe_bidi<'life0, 'async_trait>(
        &'life0 self,
        requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>,
    ) -> Pin<Box<dyn Future<Output = Result<Self::SubscribeStream, Self::Error>> + Send + 'async_trait>>
       where 'life0: 'async_trait,
             Self: 'async_trait;

    // Provided method
    fn bidi_limits(&self) -> Arc<LimitsConfiguration>  { ... }
}
Expand description

The XIP-83 bidirectional subscription: one long-lived stream carrying group and welcome messages, mutated in place (no reconnect on membership change) and kept alive with WebSocket-style ping/pong. Native-only — gRPC-Web transports cannot speak full-duplex, so browsers stay on XmtpMlsStreams with a client-side watchdog.

Required Associated Types§

Required Methods§

Source

fn host(&self) -> &str

Return the URL used for bidi connections. Combine it with the API client’s Arc identity when selecting a shared connection.

Source

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<Self::SubscribeStream, Self::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Open the bidirectional stream. requests is the outbound client→server frame stream (typically fed by a channel; the first frame is an Update naming the initial topic set); the returned stream yields the server→client frames.

Provided Methods§

Source

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

The frame shapes this deployment accepts (CFG-064), as installed by XmtpBackendClient::set_limits. The bidi ledger chunks interest updates below ApiClientWrapper, so it cannot read the wrapper’s copy and asks the transport instead. A transport that was never told reports the compiled defaults.

Implementations on Foreign Types§

Source§

impl<C> XmtpMlsBidiStreams for BackendClient<C>
where C: Client,

Source§

type SubscribeStream = XmtpStream<SubscribeResponse>

Source§

type Error = ApiClientError

Source§

fn host(&self) -> &str

Source§

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

Source§

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<<BackendClient<C> as XmtpMlsBidiStreams>::SubscribeStream, <BackendClient<C> as XmtpMlsBidiStreams>::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, BackendClient<C>: 'async_trait,

Source§

impl<C> XmtpMlsBidiStreams for TrackedStatsClient<C>

Source§

type SubscribeStream = <C as XmtpMlsBidiStreams>::SubscribeStream

Source§

type Error = <C as XmtpMlsBidiStreams>::Error

Source§

fn host(&self) -> &str

Source§

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

Source§

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<<TrackedStatsClient<C> as XmtpMlsBidiStreams>::SubscribeStream, <TrackedStatsClient<C> as XmtpMlsBidiStreams>::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, TrackedStatsClient<C>: 'async_trait,

Source§

impl<C> XmtpMlsBidiStreams for BoxedStreamsClient<C>

Source§

type SubscribeStream = <C as XmtpMlsBidiStreams>::SubscribeStream

Source§

type Error = <C as XmtpMlsBidiStreams>::Error

Source§

fn host(&self) -> &str

Source§

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

Source§

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<<BoxedStreamsClient<C> as XmtpMlsBidiStreams>::SubscribeStream, <BoxedStreamsClient<C> as XmtpMlsBidiStreams>::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, BoxedStreamsClient<C>: 'async_trait,

Source§

impl<T> XmtpMlsBidiStreams for Box<T>

Source§

type Error = <T as XmtpMlsBidiStreams>::Error

Source§

type SubscribeStream = <T as XmtpMlsBidiStreams>::SubscribeStream

Source§

fn host(&self) -> &str

Source§

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

Source§

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<<Box<T> as XmtpMlsBidiStreams>::SubscribeStream, <Box<T> as XmtpMlsBidiStreams>::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Box<T>: 'async_trait,

Source§

impl<T> XmtpMlsBidiStreams for Arc<T>

Source§

type Error = <T as XmtpMlsBidiStreams>::Error

Source§

type SubscribeStream = <T as XmtpMlsBidiStreams>::SubscribeStream

Source§

fn host(&self) -> &str

Source§

fn bidi_limits(&self) -> Arc<LimitsConfiguration>

Source§

fn subscribe_bidi<'life0, 'async_trait>( &'life0 self, requests: Pin<Box<dyn Stream<Item = SubscribeRequest> + Send>>, ) -> Pin<Box<dyn Future<Output = Result<<Arc<T> as XmtpMlsBidiStreams>::SubscribeStream, <Arc<T> as XmtpMlsBidiStreams>::Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Arc<T>: 'async_trait,

Implementors§