use std::collections::VecDeque;
#[derive(Debug, Clone)]
pub struct Task {
pub id: String,
pub payload: String,
}
pub struct TaskQueue {
inner: VecDeque<Task>,
capacity: usize,
}
impl TaskQueue {
pub fn new(capacity: usize) -> Self {
Self {
inner: VecDeque::with_capacity(capacity),
capacity,
}
}
pub fn enqueue(&mut self, task: Task) -> bool {
if self.inner.len() >= self.capacity {
return false;
}
self.inner.push_back(task);
true
}
pub fn dequeue(&mut self) -> Option<Task> {
self.inner.pop_front()
}
pub fn peek(&self) -> Option<&Task> {
self.inner.front()
}
pub fn len(&self) -> usize {
self.inner.len()
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
pub fn is_full(&self) -> bool {
self.inner.len() >= self.capacity
}
pub fn clear(&mut self) {
self.inner.clear();
}
pub fn drain(&mut self) -> Vec<Task> {
self.inner.drain(..).collect()
}
pub fn capacity(&self) -> usize {
self.capacity
}
}