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();
}
}