pub(crate) mod concurrent;
use std::path::PathBuf;
use async_channel::TryRecvError;
#[derive(Debug, Clone, PartialEq)]
pub struct Data<T> {
pub path: PathBuf,
pub items: Vec<T>,
}
impl<T> Data<T> {
pub(crate) fn new(path: PathBuf, items: Vec<T>) -> Self {
Self { path, items }
}
}
type AsyncReceiver<T> = async_channel::Receiver<T>;
pub struct Receiver<T> {
pub receiver: AsyncReceiver<T>,
}
impl<T> Receiver<T> {
pub(crate) fn new(receiver: AsyncReceiver<T>) -> Receiver<T> {
Receiver { receiver }
}
pub fn recv_blocking(&self) -> Option<T> {
self.receiver.recv_blocking().ok()
}
pub fn try_recv(&self) -> Option<Option<T>> {
match self.receiver.try_recv() {
Ok(t) => Some(Some(t)),
Err(TryRecvError::Closed) => Some(None),
Err(TryRecvError::Empty) => None,
}
}
pub async fn recv_async(&self) -> Option<T> {
self.receiver.recv().await.ok()
}
}