driftdb 0.1.4

A real-time data backend for browser-based applications (core library).
Documentation
use crate::types::MessageFromDatabase;
use std::{
    collections::VecDeque,
    sync::{Arc, Mutex},
};

pub struct MessageStash {
    messages: Arc<Mutex<VecDeque<MessageFromDatabase>>>,
}

impl MessageStash {
    pub fn new() -> (MessageStash, impl Fn(&MessageFromDatabase)) {
        let stash = MessageStash {
            messages: Arc::new(Mutex::new(VecDeque::new())),
        };

        let callback = {
            let messages = stash.messages.clone();
            move |message: &MessageFromDatabase| {
                messages.lock().unwrap().push_back(message.clone());
            }
        };

        (stash, callback)
    }

    pub fn next(&self) -> Option<MessageFromDatabase> {
        self.messages.lock().unwrap().pop_front()
    }
}