rusty_chain 0.1.18

This library abstracts over functional processing units called `chain links`. Each link in the chain is meant to be independent, immutable, idempotent, and highly testable.
Documentation
use tokio::sync::Mutex;


pub struct Queue<T> {
    items: Mutex<Vec<T>>
}

impl<T> Default for Queue<T> {
    fn default() -> Self {
        Queue {
            items: Mutex::new(Vec::new())
        }
    }
}

impl<T> Queue<T> {
    pub async fn push(&self, item: T) {
        let mut locked_items = self.items.lock().await;
        locked_items.push(item);
    }
    pub async fn push_if_empty(&self, item: T) {
        let mut locked_items = self.items.lock().await;
        if locked_items.is_empty() {
            locked_items.push(item);
        }
    }
    pub async fn try_pop(&self) -> Option<T> {
        let popped_item: Option<T>;
        {
            let mut locked_items = self.items.lock().await;
            popped_item = if locked_items.len() == 0 {
                None
            }
            else {
                Some(locked_items.remove(0usize))
            };
        }
        return popped_item;
    }
}