///|
/// A simple mailbox for actors to queue incoming messages.
pub struct Mailbox[Msg] {
messages : Array[Msg]
}
///|
/// Creates a new, empty Mailbox.
pub fn[Msg] Mailbox::new() -> Mailbox[Msg] {
{ messages: [] }
}
///|
pub fn[Msg] Mailbox::enqueue(self : Mailbox[Msg], msg : Msg) -> Unit {
self.messages.push(msg)
}
///|
pub fn[Msg] Mailbox::dequeue(self : Mailbox[Msg]) -> Msg? {
if self.messages.length() == 0 {
None
} else {
Some(self.messages.remove(0))
}
}