use std::sync::Arc;
use tokio::sync::broadcast;
use crate::storage::WatchEvent;
const CHANNEL_CAPACITY: usize = 1024;
#[derive(Clone)]
pub struct WatchBroadcaster {
sender: Arc<broadcast::Sender<WatchEvent>>,
}
impl WatchBroadcaster {
pub fn new() -> Self {
let (sender, _) = broadcast::channel(CHANNEL_CAPACITY);
Self {
sender: Arc::new(sender),
}
}
pub fn send(&self, event: WatchEvent) {
let _ = self.sender.send(event);
}
pub fn subscribe(&self) -> broadcast::Receiver<WatchEvent> {
self.sender.subscribe()
}
}
impl Default for WatchBroadcaster {
fn default() -> Self {
Self::new()
}
}