35 lines
735 B
Rust
35 lines
735 B
Rust
//! Event bus for kernel events
|
|
|
|
use tokio::sync::broadcast;
|
|
use zclaw_types::Event;
|
|
|
|
/// Event bus for publishing and subscribing to events
|
|
pub struct EventBus {
|
|
sender: broadcast::Sender<Event>,
|
|
}
|
|
|
|
impl EventBus {
|
|
/// Create a new event bus
|
|
pub fn new() -> Self {
|
|
let (sender, _) = broadcast::channel(1000);
|
|
Self { sender }
|
|
}
|
|
|
|
/// Publish an event
|
|
pub fn publish(&self, event: Event) {
|
|
// Ignore send errors (no subscribers)
|
|
let _ = self.sender.send(event);
|
|
}
|
|
|
|
/// Subscribe to events
|
|
pub fn subscribe(&self) -> broadcast::Receiver<Event> {
|
|
self.sender.subscribe()
|
|
}
|
|
}
|
|
|
|
impl Default for EventBus {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|