```rust use bidirectional_channel::{bounded}; use futures::join;
let (requester, responder) = bounded(1);
// A requesting task let requester = async { requester .send("hello") .await .expect("Responder or UnRespondedRequest was dropped") };
// A responding task. // This receives an &str, and returns its length let responder = async { let request = responder.recv().await.expect("Requester was dropped"); let len = request.len(); request.respond(len).unwrap() };
// Perform the exchange let (response, request) = join!(requester, responder); assert!(request.len() == response) ```