rustybook-messenger 0.2.1

Messenger client for Rustybook
Documentation
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()
    }
}