Skip to content

Generic session types in Rust for async send recv channel

License

Notifications You must be signed in to change notification settings

chnlkw/generic-session-types

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

generic-session-types

Generic session types in Rust for async send recv channel

Prerequisites

rustup default nightly

Usage

Add dependency to Cargo.toml

[dependencies]
generic-session-types = "0.1.1"

Example

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

References

About

Generic session types in Rust for async send recv channel

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages