taskflow-rs 0.1.1

A high-performance, async-first task orchestration framework for Rust
Documentation
use crate::task::Task;
use std::sync::Arc;
use tokio::sync::Mutex;

#[derive(Clone)]
pub struct TaskQueue {
    inner: Arc<Mutex<Vec<Task>>>,
}

impl TaskQueue {
    pub fn new() -> Self {
        Self {
            inner: Arc::new(Mutex::new(Vec::new())),
        }
    }

    pub async fn push(&self, task: Task) {
        let mut queue = self.inner.lock().await;
        queue.push(task);
    }

    pub async fn pop(&self) -> Option<Task> {
        let mut queue = self.inner.lock().await;
        queue.pop()
    }

    pub async fn len(&self) -> usize {
        let queue = self.inner.lock().await;
        queue.len()
    }

    pub async fn is_empty(&self) -> bool {
        let queue = self.inner.lock().await;
        queue.is_empty()
    }

    pub async fn clear(&self) {
        let mut queue = self.inner.lock().await;
        queue.clear();
    }
}