Message Passing
Mailbox Drain
Process Messages in Order
A mailbox can be modeled as a queue of messages drained by one receiver in first-in, first-out order.
Program
Play the program to choose the second message and drain the mailbox into one summary.
mailbox_drain.rs
use std::collections::VecDeque;
fn main() {
let second = ;
let mut mailbox = VecDeque::new();
mailbox.push_back("open");
mailbox.push_back(second);
let summary = drain(&mut mailbox);
println!("{summary}");
}
fn drain(mailbox: &mut VecDeque<&str>) -> String {
let mut seen = Vec::new();
while let Some(message) = mailbox.pop_front() {
seen.push(message);
}
seen.join(",")
}
use std::collections::VecDeque;
fn main() {
let second = ;
let mut mailbox = VecDeque::new();
mailbox.push_back("open");
mailbox.push_back(second);
let summary = drain(&mut mailbox);
println!("{summary}");
}
fn drain(mailbox: &mut VecDeque<&str>) -> String {
let mut seen = Vec::new();
while let Some(message) = mailbox.pop_front() {
seen.push(message);
}
seen.join(",")
}
use std::collections::VecDeque;
fn main() {
let second = ;
let mut mailbox = VecDeque::new();
mailbox.push_back("open");
mailbox.push_back(second);
let summary = drain(&mut mailbox);
println!("{summary}");
}
fn drain(mailbox: &mut VecDeque<&str>) -> String {
let mut seen = Vec::new();
while let Some(message) = mailbox.pop_front() {
seen.push(message);
}
seen.join(",")
}
mailbox
`VecDeque` models a queue that can push at the back and pop from the front.
drain
`while let Some(...)` keeps receiving until the mailbox is empty.
ordering
`pop_front` preserves the order in which messages were queued.