use {
core::task::{Context, Poll},
tokio::sync::mpsc,
};
#[derive(Debug)]
pub struct UnboundedChannel<T> {
sender: mpsc::UnboundedSender<T>,
receiver: mpsc::UnboundedReceiver<T>,
}
impl<T> Default for UnboundedChannel<T> {
fn default() -> Self {
let (sender, receiver) = mpsc::unbounded_channel();
Self { sender, receiver }
}
}
impl<T> UnboundedChannel<T> {
#[allow(dead_code)]
pub const fn sender(&self) -> &mpsc::UnboundedSender<T> {
&self.sender
}
#[allow(dead_code)]
pub const fn receiver(&mut self) -> &mut mpsc::UnboundedReceiver<T> {
&mut self.receiver
}
pub fn send(&self, message: T) {
let _ = self.sender.send(message);
}
pub async fn recv(&mut self) -> Option<T> {
self.receiver.recv().await
}
pub fn is_empty(&self) -> bool {
self.receiver.is_empty()
}
pub fn len(&self) -> usize {
self.receiver.len()
}
#[allow(dead_code)]
pub fn poll_recv(&mut self, cx: &mut Context<'_>) -> Poll<Option<T>> {
self.receiver.poll_recv(cx)
}
pub fn poll_recv_many(
&mut self,
cx: &mut Context<'_>,
buffer: &mut Vec<T>,
limit: usize,
) -> Poll<usize> {
self.receiver.poll_recv_many(cx, buffer, limit)
}
}