7 releases
0.3.1 | Jul 8, 2021 |
---|---|
0.3.0 | Jul 8, 2021 |
0.2.3 | Jun 10, 2021 |
0.1.0 | Jun 8, 2021 |
#44 in #async-channel
9KB
78 lines
bidirectional-channel
Async channel with request-response semantics
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)
Dependencies
~5–14MB
~193K SLoC