use commonware_utils::channel::mpsc;
#[derive(Debug)]
pub struct Mailbox<T>(pub(crate) mpsc::Sender<T>);
impl<T> Mailbox<T> {
pub fn new(size: usize) -> (Self, mpsc::Receiver<T>) {
let (sender, receiver) = mpsc::channel(size);
(Self(sender), receiver)
}
}
impl<T> Clone for Mailbox<T> {
fn clone(&self) -> Self {
Self(self.0.clone())
}
}
#[derive(Debug)]
pub struct UnboundedMailbox<T>(pub(crate) mpsc::UnboundedSender<T>);
impl<T> UnboundedMailbox<T> {
pub fn new() -> (Self, mpsc::UnboundedReceiver<T>) {
let (sender, receiver) = mpsc::unbounded_channel();
(Self(sender), receiver)
}
}
impl<T> Clone for UnboundedMailbox<T> {
fn clone(&self) -> Self {
Self(self.0.clone())
}
}