1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
pub use tokio::sync::broadcast::error::RecvError as EventRecvError; pub use tokio::sync::broadcast::error::SendError; use tokio::sync::broadcast::{Receiver as BroadcastReceiver, Sender as BroadcastSender}; use tokio::sync::broadcast; pub type EventReceiver<T> = BroadcastReceiver<T>; pub(crate) type EventSender<T> = BroadcastSender<T>; #[derive(Clone)] pub struct EventBus<T: Clone> { tx: EventSender<T>, } impl<T: Clone> EventBus<T> { pub fn subscribe(&self) -> EventReceiver<T> { self.tx.subscribe() } pub fn send(&self, event: T) -> Result<usize, SendError<T>> { self.tx.send(event) } pub fn new(capacity: usize) -> Self { let (tx, _) = broadcast::channel(capacity); EventBus { tx } } }