rustybook 0.2.0

An ergonomic Facebook client in Rust
Documentation
use std::collections::VecDeque;
use std::sync::RwLock;

const DEFAULT_MESSAGE_CACHE_LIMIT: usize = 200;

/// Event cache for messenger runtime events.
#[derive(Debug)]
pub struct EventCache {
    messages: RwLock<VecDeque<crate::Message>>,
    message_limit: usize,
}

impl EventCache {
    /// Creates an event cache with default limits.
    pub fn new() -> Self {
        Self {
            messages: RwLock::new(VecDeque::new()),
            message_limit: DEFAULT_MESSAGE_CACHE_LIMIT,
        }
    }

    /// Returns cached message events.
    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()
    }
}