use crate::message::Message;
use tokio::sync::mpsc;
#[derive(Debug)]
pub struct ClosedChannel;
#[derive(Clone)]
pub struct Sender(pub(crate) mpsc::Sender<Message>);
impl Sender {
pub async fn send(&self, message: Message) -> Result<(), ClosedChannel> {
self.0.send(message).await.map_err(|_| ClosedChannel)
}
pub fn blocking_send(&self, message: Message) -> Result<(), ClosedChannel> {
self.0.blocking_send(message).map_err(|_| ClosedChannel)
}
}
pub struct Receiver(pub(crate) mpsc::Receiver<Message>);
impl Receiver {
pub async fn recv(&mut self) -> Result<Message, ClosedChannel> {
self.0.recv().await.ok_or(ClosedChannel)
}
}