Crates.io | generic-session-types |
lib.rs | generic-session-types |
version | 0.1.1 |
source | src |
created_at | 2022-11-26 07:07:07.790453 |
updated_at | 2023-05-18 12:46:10.018533 |
description | Generic session types in Rust for async send recv channel |
homepage | https://github.com/chnlkw/generic-session-types |
repository | https://github.com/chnlkw/generic-session-types |
max_upload_size | |
id | 723147 |
size | 22,551 |
Generic session types in Rust for async send recv channel
rustup default nightly
Add dependency to Cargo.toml
[dependencies]
generic-session-types = "0.1.0"
use generic_session_types::*;
type P2 = Send<String, Recv<usize, Close>>;
#[tokio::test]
async fn test_tokio_mpsc_channel2_dyn_message() {
let (client, server) = mpsc::channel::<P2, BoxAnyRepr>(10);
let msg = String::from("asdfsdfds");
let h1: JoinHandle<Result<usize, Error>> = tokio::spawn(async move {
send!(client, msg);
recv!(client, r);
close!(client);
Ok(r)
});
let h2: JoinHandle<Result<(), Error>> = tokio::spawn(async move {
let (s, c) = server.recv().await?;
let c = c.send(s.len()).await?;
c.close().await?;
Ok(())
});
let r0 = h1.await.unwrap();
let r1 = h2.await.unwrap();
assert_eq!(r0, Ok(9));
assert_eq!(r1, Ok(()));
}
See more cases in tests