use std::fmt::{self, Debug};
use crate::actor::Actor;
use crate::channel::mpsc;
use crate::envelope::Envelope;
use crate::errors::RecvError;
#[repr(transparent)]
pub struct Mailbox<A>(mpsc::Receiver<Envelope<A>>)
where
A: Actor;
impl<A> Debug for Mailbox<A>
where
A: Actor,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("Mailbox<{}>", crate::utils::type_name::<A>()))
}
}
impl<A> Mailbox<A>
where
A: Actor,
{
pub fn new(rx: mpsc::Receiver<Envelope<A>>) -> Self {
Self(rx)
}
pub fn recv(&mut self) -> impl Future<Output = Result<Envelope<A>, RecvError>> + Send {
self.0.recv()
}
pub fn try_recv(&mut self) -> Result<Envelope<A>, RecvError> {
self.0.try_recv()
}
pub fn close(&mut self) {
self.0.close();
}
pub fn is_closed(&self) -> bool {
self.0.is_closed()
}
pub fn is_empty(&self) -> bool {
self.0.is_empty()
}
pub fn len(&self) -> usize {
self.0.len()
}
pub fn capacity(&self) -> usize {
self.0.capacity()
}
pub fn max_capacity(&self) -> usize {
self.0.max_capacity()
}
}