use calloop::EventLoop;
use futures::sink::SinkExt;
use futures::stream::StreamExt;
fn main() -> std::io::Result<()> {
let (exec, sched) = calloop::futures::executor()?;
let mut event_loop = EventLoop::try_new()?;
let handle = event_loop.handle();
handle.insert_source(exec, |evt, _metadata, _shared| {
println!("Async block ended with: {}", evt);
})?;
let (mut sender_friendly, mut receiver_friendly) = futures::channel::mpsc::unbounded();
let (mut sender_aloof, mut receiver_aloof) = futures::channel::mpsc::unbounded();
let async_friendly_task = async move {
sender_friendly.send("Hello,").await.ok();
receiver_aloof
.next()
.await
.map(|m| println!("Aloof said: {}", m));
sender_friendly.send("world!").await.ok();
receiver_aloof
.next()
.await
.map(|m| println!("Aloof said: {}", m));
"Bye!"
};
let async_aloof_task = async move {
receiver_friendly
.next()
.await
.map(|m| println!("Friendly said: {}", m));
sender_aloof.send("Oh,").await.ok();
receiver_friendly
.next()
.await
.map(|m| println!("Friendly said: {}", m));
sender_aloof.send("it's you.").await.ok();
"Regards."
};
sched.schedule(async_friendly_task).unwrap();
sched.schedule(async_aloof_task).unwrap();
println!("Starting event loop. Use Ctrl-C to exit.");
event_loop.run(None, &mut (), |_| {})?;
println!("Event loop ended.");
Ok(())
}