#![allow(dead_code)]
use super::Event;
use super::Subscriber;
pub struct EventBus<T> {
events: Vec<Event<T>>,
subscribers: Vec<Box<dyn Subscriber<Input = T>>>,
}
impl<T> EventBus<T> {
pub fn new() -> EventBus<T> {
EventBus {
events: Vec::new(),
subscribers: Vec::new(),
}
}
pub fn publish(&mut self, message: Event<T>) {
self.events.push(message);
}
pub fn subscribe_listener(&mut self, listener: Box<dyn Subscriber<Input = T>>) {
self.subscribers.push(listener);
}
pub fn run(&mut self) {
for event in self.events.drain(..) {
for listener in self.subscribers.iter_mut() {
listener.on_event(&event);
}
}
}
pub fn clear(&mut self) {
self.events.clear();
}
}
impl<T> Default for EventBus<T> {
fn default() -> Self {
Self::new()
}
}