Skip to main content

planspec_server/
watch.rs

1use std::sync::Arc;
2use tokio::sync::broadcast;
3
4use crate::storage::WatchEvent;
5
6const CHANNEL_CAPACITY: usize = 1024;
7
8/// Broadcasts watch events to subscribers
9#[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    /// Send an event to all subscribers
23    pub fn send(&self, event: WatchEvent) {
24        // Ignore send errors (no subscribers)
25        let _ = self.sender.send(event);
26    }
27
28    /// Subscribe to events
29    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}