use crate::{Error, Result};
#[allow(unused)]
pub fn new_one_shot_channel<T>(name: &'static str) -> (OneShotTx<T>, OneShotRx<T>) {
let (tx, rx) = flume::bounded(1);
(OneShotTx(tx, name), OneShotRx(rx, name))
}
#[derive(Debug, Clone)]
pub struct OneShotTx<T>(flume::Sender<T>, &'static str);
impl<T> OneShotTx<T> {
pub async fn send(self, value: impl Into<T>) -> Result<()> {
self.0.send_async(value.into()).await.map_err(|err| Error::ChannelTx {
name: self.1,
cause: err.to_string(),
})
}
#[allow(unused)]
pub fn send_sync(self, value: impl Into<T>) -> Result<()> {
self.0.send(value.into()).map_err(|err| Error::ChannelTx {
name: self.1,
cause: err.to_string(),
})
}
}
pub struct OneShotRx<T>(flume::Receiver<T>, &'static str);
#[allow(unused)]
impl<T> OneShotRx<T> {
pub async fn recv(self) -> Result<T> {
self.0.recv_async().await.map_err(|err| Error::ChannelRx {
name: self.1,
cause: err.to_string(),
})
}
pub fn recv_sync(self) -> Result<T> {
self.0.recv().map_err(|err| Error::ChannelRx {
name: self.1,
cause: err.to_string(),
})
}
}