BlockingPublisher

Struct BlockingPublisher 

Source
pub struct BlockingPublisher<Message> { /* private fields */ }
Expand description

A blocking publisher is a publisher that blocks messages until it has enough subscribers

This is useful for cases where a publisher is being used asynchronously and wants to ensure that its messages are sent to at least one subscriber. Once the required number of subscribers is reached, this will not block again even if some subscribers are dropped.

Implementations§

Source§

impl<Message: Clone> BlockingPublisher<Message>

Source

pub fn new( required_subscribers: usize, buffer_size: usize, ) -> BlockingPublisher<Message>

Creates a new blocking publisher

This publisher will refuse to receive any items until at least required_subscribers are connected. The buffer size indicates the number of queued items permitted per buffer.

Source

pub fn when_fully_subscribed( &mut self, ) -> impl Future<Output = Result<(), Canceled>> + Send

Returns a future that will complete when this publisher has enough subscribers

This is useful as a way to avoid blocking with wait_send when setting up the publisher

Trait Implementations§

Source§

impl<Message: 'static + Send + Clone> MessagePublisher for BlockingPublisher<Message>

Source§

fn when_ready(&mut self) -> BoxFuture<'static, MessageSender<Message>>

Reserves a space for a message with the subscribers, returning when it’s ready

Source§

fn when_empty(&mut self) -> BoxFuture<'static, ()>

Waits until all subscribers have consumed all pending messages

Source§

fn is_closed(&self) -> bool

Returns true if this publisher is closed (will not publish any further messages to its subscribers)

Source§

fn when_closed(&self) -> BoxFuture<'static, ()>

Future that returns when this publisher is closed

Source§

type Message = Message

Source§

fn subscribe(&mut self) -> Subscriber<Message>

Creates a subscription to this publisher Read more
Source§

fn publish(&mut self, message: Self::Message) -> BoxFuture<'static, ()>

Publishes a message to the subscribers of this object

Auto Trait Implementations§

§

impl<Message> Freeze for BlockingPublisher<Message>

§

impl<Message> !RefUnwindSafe for BlockingPublisher<Message>

§

impl<Message> Send for BlockingPublisher<Message>
where Message: Send,

§

impl<Message> Sync for BlockingPublisher<Message>
where Message: Send,

§

impl<Message> Unpin for BlockingPublisher<Message>

§

impl<Message> !UnwindSafe for BlockingPublisher<Message>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> SendStreamToPublisher for T

Source§

fn send_all<'a, SourceStream>( &'a mut self, stream: SourceStream, ) -> StreamPublisher<'a, T, SourceStream>
where SourceStream: 'a + Stream<Item = <T as MessagePublisher>::Message>,

Sends everything from a particular source stream to this publisher
Source§

impl<Publisher> ToPublisherSink for Publisher
where Publisher: MessagePublisher,

Source§

fn to_sink(self) -> PublisherSink<Publisher>

Converts this publisher into a futures Sink
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.