use std::collections::VecDeque;
#[derive(Clone, Debug, PartialEq)]
pub enum Event {
ThemeChanged,
UserUpdated,
PluginMessage {
from: String,
to: String,
action: String,
data: String,
},
}
#[derive(Debug, Default)]
pub struct EventBus {
pending: VecDeque<Event>,
}
const MAX_PENDING: usize = 1024;
impl EventBus {
pub fn new() -> Self {
Self {
pending: VecDeque::new(),
}
}
pub fn emit(&mut self, event: Event) {
if self.pending.len() >= MAX_PENDING {
self.pending.pop_front();
}
self.pending.push_back(event);
}
pub fn drain(&mut self) -> Vec<Event> {
self.pending.drain(..).collect()
}
}