Asynchronous inter-component communication library
```rust use intercomm::{broadcast, notification, request};
intercomm::declare! { request Sum((i32, i32)) -> i32; request Mul((i32, i32)) -> i32;
notification[2] Ready(());
broadcast[1] Close(());
}
async fn sum_listener() {
let mut listener = request::listen::
loop {
tokio::select! {
_ = close.recv() => {
listener.close().await;
close.close().await;
return;
}
_ = listener.accept(|(a, b)| async move {
println!("Sum requested with: ({}, {})", a, b);
a + b
}) => {}
}
}
}
async fn mul_listener() {
let mut listener = request::listen::
loop {
tokio::select! {
_ = close.recv() => {
listener.close().await;
close.close().await;
return;
}
_ = listener.accept(|(a, b)| async move {
println!("Mul requested with: ({}, {})", a, b);
a * b
}) => {}
}
}
}
async fn main() {
let mut ready = notification::subscribe::
let sum = Sum::request((5, 10)).await.expect("Cannot request Sum");
println!("5 + 10 = {}", sum);
let mul = Mul::request((5, 10)).await.expect("Cannot request Mul");
println!("5 * 10 = {}", mul);
Close::notify(()).await;
sum_join.await.expect("sum_listener panicked");
mul_join.await.expect("mul_listener panicked");
} ```