//! In-process event bus: nudges the webhook worker and streams proposal //! updates to open pages over server-sent events (hub spec ยง13.1). use hub_api::ProposalEvent; use tokio::sync::broadcast; pub struct Events { pub deliveries: broadcast::Sender<()>, pub proposals: broadcast::Sender<(i64, ProposalEvent)>, } impl Default for Events { fn default() -> Self { Events { deliveries: broadcast::channel(16).0, proposals: broadcast::channel(256).0 } } } impl Events { pub fn notify_deliveries(&self) { let _ = self.deliveries.send(()); } /// Announce something about a proposal of a repository. pub fn proposal(&self, repo_id: i64, event: ProposalEvent) { let _ = self.proposals.send((repo_id, event)); } }