Files
pages-tui/src/orchestrator/event_bus.rs
filipriec_vm ad9bb78fc8 orchestrator
2026-01-12 00:59:05 +01:00

47 lines
897 B
Rust

// path_from_the_root: src/orchestrator/event_bus.rs
extern crate alloc;
use alloc::boxed::Box;
use alloc::vec::Vec;
pub trait EventHandler<E> {
fn handle(&mut self, event: E);
}
pub struct EventBus<E: Clone> {
handlers: Vec<Box<dyn EventHandler<E>>>,
}
impl<E: Clone> Default for EventBus<E> {
fn default() -> Self {
Self::new()
}
}
impl<E: Clone> EventBus<E> {
pub fn new() -> Self {
Self {
handlers: Vec::new(),
}
}
pub fn register(&mut self, handler: Box<dyn EventHandler<E>>) {
self.handlers.push(handler);
}
pub fn emit(&mut self, event: E) {
for handler in &mut self.handlers {
handler.handle(event.clone());
}
}
pub fn handler_count(&self) -> usize {
self.handlers.len()
}
pub fn is_empty(&self) -> bool {
self.handlers.is_empty()
}
}