use std::time::Duration;
use postage::{broadcast, prelude::Stream, sink::Sink};
#[tokio::main]
async fn main() {
let (mut tx, rx) = broadcast::channel::<usize>(8);
let mut tx2 = tx.clone();
let rx2 = rx.clone();
tokio::task::spawn(print_messages("alice", rx));
tokio::task::spawn(print_messages("bob", rx2));
tx.send(0).await.ok();
let rx3 = tx.subscribe();
tokio::task::spawn(print_messages("charlie", rx3));
tx2.send(1).await.ok();
tokio::time::sleep(Duration::from_millis(50)).await;
}
async fn print_messages(name: &'static str, mut rx: impl Stream<Item = usize> + Unpin) {
while let Some(message) = rx.recv().await {
println!("{} got a message: {}", name, message);
}
}