1pub(crate) mod concurrent;
4use std::path::PathBuf;
5
6use async_channel::TryRecvError;
7
8#[derive(Debug, Clone, PartialEq)]
10pub struct Data<T> {
11 pub path: PathBuf,
13 pub items: Vec<T>,
15}
16
17impl<T> Data<T> {
18 pub(crate) fn new(path: PathBuf, items: Vec<T>) -> Self {
19 Self { path, items }
20 }
21}
22
23type AsyncReceiver<T> = async_channel::Receiver<T>;
24
25pub struct Receiver<T> {
27 pub receiver: AsyncReceiver<T>,
29}
30
31impl<T> Receiver<T> {
32 pub(crate) fn new(receiver: AsyncReceiver<T>) -> Receiver<T> {
33 Receiver { receiver }
34 }
35 pub fn recv_blocking(&self) -> Option<T> {
38 self.receiver.recv_blocking().ok()
39 }
40 pub fn try_recv(&self) -> Option<Option<T>> {
43 match self.receiver.try_recv() {
44 Ok(t) => Some(Some(t)),
45 Err(TryRecvError::Closed) => Some(None),
46 Err(TryRecvError::Empty) => None,
47 }
48 }
49 pub async fn recv_async(&self) -> Option<T> {
53 self.receiver.recv().await.ok()
54 }
55}