A channel separates message producers from consumers. This example uses it on one thread so replay stays deterministic.

Program

Play the program to choose the first message and receive both queued messages in order.

channel_queue.rs
use std::sync::mpsc;

fn main() {
    let first = ;
    let (sender, receiver) = mpsc::channel();
    sender.send(first).unwrap();
    sender.send("done").unwrap();
    let a = receiver.recv().unwrap();
    let b = receiver.recv().unwrap();
    println!("{a}->{b}");
}
use std::sync::mpsc;

fn main() {
    let first = ;
    let (sender, receiver) = mpsc::channel();
    sender.send(first).unwrap();
    sender.send("done").unwrap();
    let a = receiver.recv().unwrap();
    let b = receiver.recv().unwrap();
    println!("{a}->{b}");
}
use std::sync::mpsc;

fn main() {
    let first = ;
    let (sender, receiver) = mpsc::channel();
    sender.send(first).unwrap();
    sender.send("done").unwrap();
    let a = receiver.recv().unwrap();
    let b = receiver.recv().unwrap();
    println!("{a}->{b}");
}
channel `mpsc::channel` creates a sender and receiver pair.
send `send` appends a message for the receiver to consume later.
recv `recv` removes the next queued message in FIFO order.