1use std::sync::Arc;
2use tokio::sync::broadcast;
3
4use crate::storage::WatchEvent;
5
6const CHANNEL_CAPACITY: usize = 1024;
7
8#[derive(Clone)]
10pub struct WatchBroadcaster {
11 sender: Arc<broadcast::Sender<WatchEvent>>,
12}
13
14impl WatchBroadcaster {
15 pub fn new() -> Self {
16 let (sender, _) = broadcast::channel(CHANNEL_CAPACITY);
17 Self {
18 sender: Arc::new(sender),
19 }
20 }
21
22 pub fn send(&self, event: WatchEvent) {
24 let _ = self.sender.send(event);
26 }
27
28 pub fn subscribe(&self) -> broadcast::Receiver<WatchEvent> {
30 self.sender.subscribe()
31 }
32}
33
34impl Default for WatchBroadcaster {
35 fn default() -> Self {
36 Self::new()
37 }
38}