use std::collections::VecDeque;
use std::sync::RwLock;
const DEFAULT_MESSAGE_CACHE_LIMIT: usize = 200;
#[derive(Debug)]
pub struct EventCache {
messages: RwLock<VecDeque<crate::Message>>,
message_limit: usize,
}
impl EventCache {
pub fn new() -> Self {
Self {
messages: RwLock::new(VecDeque::new()),
message_limit: DEFAULT_MESSAGE_CACHE_LIMIT,
}
}
pub fn messages(&self) -> Vec<crate::Message> {
self.messages
.read()
.ok()
.map(|messages| messages.iter().cloned().collect())
.unwrap_or_default()
}
pub fn push_message(&self, message: crate::Message) {
if let Ok(mut messages) = self.messages.write() {
messages.push_back(message);
while messages.len() > self.message_limit {
messages.pop_front();
}
}
}
}
impl Default for EventCache {
fn default() -> Self {
Self::new()
}
}