use tokio::sync::mpsc;
use super::Frame;
#[derive(Debug)]
pub struct FramedRecv {
receiver: mpsc::Receiver<Frame>,
}
impl FramedRecv {
pub fn new(receiver: mpsc::Receiver<Frame>) -> Self {
Self { receiver }
}
pub async fn recv(&mut self) -> Option<Frame> {
self.receiver.recv().await
}
}
#[derive(Clone, Debug)]
pub struct FramedSend {
sender: mpsc::Sender<Frame>,
}
impl FramedSend {
pub fn new(sender: mpsc::Sender<Frame>) -> Self {
Self { sender }
}
pub async fn send(&self, frame: Frame) -> Result<(), mpsc::error::SendError<Frame>> {
self.sender.send(frame).await
}
pub fn try_send(&self, frame: Frame) -> Result<(), mpsc::error::TrySendError<Frame>> {
self.sender.try_send(frame)
}
pub fn capacity(&self) -> usize {
self.sender.capacity()
}
pub fn max_capacity(&self) -> usize {
self.sender.max_capacity()
}
}
pub fn framed_channel(depth: usize) -> (FramedSend, FramedRecv) {
let (sender, receiver) = mpsc::channel(depth);
(FramedSend::new(sender), FramedRecv::new(receiver))
}