use std::collections::VecDeque;
use parking_lot::RwLock;
use crate::client::models::Message;
const DEFAULT_MESSAGE_CACHE_LIMIT: usize = 200;
#[derive(Debug)]
pub struct MessageCache {
messages: RwLock<VecDeque<Message>>,
_limit: usize,
}
impl MessageCache {
pub fn new() -> Self {
Self {
messages: RwLock::new(VecDeque::new()),
_limit: DEFAULT_MESSAGE_CACHE_LIMIT,
}
}
pub fn messages(&self) -> Vec<Message> {
let messages = self.messages.read();
messages.iter().cloned().collect()
}
pub fn push_message(&self, message: Message) {
let mut messages = self.messages.write();
messages.push_back(message);
while messages.len() > self._limit {
messages.pop_front();
}
}
}
impl Default for MessageCache {
fn default() -> Self {
Self::new()
}
}