use crate::Control;
use std::cell::RefCell;
use std::collections::VecDeque;
use std::fmt::{Debug, Formatter};
pub(crate) struct ControlQueue<Event, Error>
where
Event: 'static,
Error: 'static,
{
queue: RefCell<VecDeque<Result<Control<Event>, Error>>>,
}
impl<Event, Error> Debug for ControlQueue<Event, Error>
where
Event: 'static,
Error: 'static,
{
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ControlQueue")
.field("queue.len", &self.queue.borrow().len())
.finish()
}
}
impl<Event, Error> Default for ControlQueue<Event, Error>
where
Event: 'static,
Error: 'static,
{
fn default() -> Self {
Self {
queue: RefCell::new(VecDeque::default()),
}
}
}
impl<Event, Error> ControlQueue<Event, Error>
where
Event: 'static,
Error: 'static,
{
pub(crate) fn is_empty(&self) -> bool {
self.queue.borrow().is_empty()
}
pub(crate) fn take(&self) -> Option<Result<Control<Event>, Error>> {
self.queue.borrow_mut().pop_front()
}
pub(crate) fn push(&self, ctrl: Result<Control<Event>, Error>) {
self.queue.borrow_mut().push_back(ctrl);
}
}