Skip to main content

Topic

Struct Topic 

Source
pub struct Topic<T: Send + Sync + 'static> { /* private fields */ }
Expand description

A cloneable stream-native broadcast topic.

Clone the handle for publishers. Each call to Topic::subscribe returns a source blueprint; each materialization registers a fresh subscriber slot. Subscribers observe every element published after their registration, in the same global order as every other subscriber, subject to this topic’s overflow policy.

Capacity is per subscriber and must be greater than zero.

Implementations§

Source§

impl<T: Send + Sync + 'static> Topic<T>

Source

pub fn new(capacity: usize, overflow: TopicOverflow) -> StreamResult<Self>

Create a new topic with per-subscriber capacity and overflow policy.

Panics if capacity == 0.

Source

pub async fn publish(&self, value: T) -> Result<(), TopicPublishError<T>>

Publish one value, waiting only under TopicOverflow::Backpressure.

The publish linearizes when this call owns its global sequence turn and loads the subscriber-table snapshot. Subscribers in that snapshot receive the value according to the configured overflow policy; subscribers registered later do not. If the topic has no subscribers, the value is accepted and dropped.

Source

pub fn try_publish(&self, value: T) -> Result<(), TopicTryPublishError<T>>

Try to publish one value without awaiting subscriber capacity or an earlier in-flight publisher.

Under TopicOverflow::Backpressure, this returns TopicTryPublishError::Full if any active subscriber in the publish snapshot is full. Under all policies, it returns TopicTryPublishError::Busy if another publisher currently owns an earlier global publish turn.

Source

pub fn subscribe(&self) -> Source<T>
where T: Clone,

Return a source blueprint that registers a fresh subscriber when materialized.

The source emits only elements published after its registration. If the topic is already closed, the materialized source completes immediately.

Source

pub fn subscriber_count(&self) -> usize

Return the number of currently active subscribers.

Source

pub fn close(&self) -> StreamResult<()>

Gracefully close the topic.

Current subscribers drain their queued elements before completing. Publishers that begin after close fail with TopicPublishError::Closed or TopicTryPublishError::Closed.

Source

pub fn is_closed(&self) -> bool

Return true after the topic has closed.

Source

pub async fn closed(&self)

Wait until the topic is closed.

Trait Implementations§

Source§

impl<T: Send + Sync + 'static> Clone for Topic<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Send + Sync + 'static> Debug for Topic<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Topic<T>

§

impl<T> RefUnwindSafe for Topic<T>

§

impl<T> Send for Topic<T>

§

impl<T> Sync for Topic<T>

§

impl<T> Unpin for Topic<T>

§

impl<T> UnsafeUnpin for Topic<T>

§

impl<T> UnwindSafe for Topic<T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> Message for T
where T: Any + Send + 'static,

Source§

fn from_boxed(m: BoxedMessage) -> Result<Self, BoxedDowncastErr>

Convert a BoxedMessage to this concrete type
Source§

fn box_message(self, pid: &ActorId) -> Result<BoxedMessage, BoxedDowncastErr>

Convert this message to a BoxedMessage
Source§

impl<T> OutputMessage for T
where T: Message + Clone,

Source§

impl<T> State for T
where T: Any + Send + 'static,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more