use std::sync::Arc;
use crate::detail::session::NativeItemQueue;
use crate::error::Result;
use crate::item::Item;
#[derive(Clone)]
pub struct ItemQueue {
inner: Arc<NativeItemQueue>,
}
impl ItemQueue {
pub(crate) fn from_native(inner: Arc<NativeItemQueue>) -> Self {
Self { inner }
}
pub(crate) fn native(&self) -> &NativeItemQueue {
&self.inner
}
pub(crate) fn into_native(self) -> Arc<NativeItemQueue> {
self.inner
}
pub fn push(&self, item: &Item) -> Result<()> {
self.inner.push_value(item)
}
pub fn try_pop(&self) -> Result<Option<Item>> {
self.inner.try_pop_value()
}
pub fn len(&self) -> usize {
self.inner.size()
}
pub fn is_empty(&self) -> bool {
self.len() == 0
}
pub fn mark_finished(&self) {
self.inner.mark_finished();
}
pub fn is_finished(&self) -> bool {
self.inner.is_finished()
}
}
impl std::fmt::Debug for ItemQueue {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ItemQueue")
.field("len", &self.len())
.field("finished", &self.is_finished())
.finish()
}
}