karyon_core::pubsub

Struct Publisher

Source
pub struct Publisher<T> {
    subs: Mutex<HashMap<SubscriptionID, Sender<T>>>,
    subscription_buffer_size: usize,
}
Expand description

A simple publish-subscribe system.

use karyon_core::pubsub::{Publisher};

 async {
    let publisher = Publisher::new();
     
    let sub = publisher.subscribe().await;
     
    publisher.notify(&String::from("MESSAGE")).await;

    let msg = sub.recv().await;

    // ....
 };
  

Fields§

§subs: Mutex<HashMap<SubscriptionID, Sender<T>>>§subscription_buffer_size: usize

Implementations§

Source§

impl<T: Clone> Publisher<T>

Source

pub fn new() -> Arc<Publisher<T>>

Creates a new Publisher

Source

pub fn with_buffer_size(size: usize) -> Arc<Publisher<T>>

Creates a new Publisher with the provided buffer size for the Subscription channel.

This is important to control the memory used by the Subscription channel. If the subscriber can’t keep up with the new messages coming, then the channel buffer will fill with new messages, and if the buffer is full, the emit function will block until the subscriber starts to process the buffered messages.

If size is zero, this function will panic.

Source

pub async fn subscribe(self: &Arc<Self>) -> Subscription<T>

Subscribes and return a Subscription

Source

pub async fn unsubscribe(self: &Arc<Self>, id: &SubscriptionID)

Unsubscribes by providing subscription id

Source

pub async fn notify(self: &Arc<Self>, value: &T)

Notifies all subscribers

Auto Trait Implementations§

§

impl<T> !Freeze for Publisher<T>

§

impl<T> !RefUnwindSafe for Publisher<T>

§

impl<T> Send for Publisher<T>
where T: Send,

§

impl<T> Sync for Publisher<T>
where T: Send,

§

impl<T> Unpin for Publisher<T>

§

impl<T> UnwindSafe for Publisher<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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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