use super::events::ChangeEvent;
use tokio::sync::broadcast;
pub struct ChangeChannel {
sender: broadcast::Sender<ChangeEvent>,
}
impl ChangeChannel {
pub fn new(buffer_size: usize) -> Self {
let (sender, _) = broadcast::channel(buffer_size);
Self { sender }
}
pub fn publish(
&self,
event: ChangeEvent,
) -> Result<(), broadcast::error::SendError<ChangeEvent>> {
self.sender.send(event).map(|_| ())
}
pub fn subscribe(&self) -> broadcast::Receiver<ChangeEvent> {
self.sender.subscribe()
}
pub fn receiver_count(&self) -> usize {
self.sender.receiver_count()
}
}
impl Clone for ChangeChannel {
fn clone(&self) -> Self {
Self {
sender: self.sender.clone(),
}
}
}