use tokio::sync::mpsc;
#[derive(Debug, Clone)]
pub(crate) struct WorkerHandle {
_sender: mpsc::Sender<()>,
}
impl WorkerHandle {
#[cfg(test)]
pub(crate) fn new_mocked() -> Self {
let (s, _) = WorkerHandleListener::channel();
s
}
}
#[derive(Debug)]
pub(crate) struct WorkerHandleListener {
receiver: mpsc::Receiver<()>,
}
impl WorkerHandleListener {
pub(crate) async fn wait_for_all_handle_drops(&mut self) {
self.receiver.recv().await;
}
pub(crate) fn channel() -> (WorkerHandle, WorkerHandleListener) {
let (sender, receiver) = mpsc::channel(1);
(
WorkerHandle { _sender: sender },
WorkerHandleListener { receiver },
)
}
}