#async #data #channel

scambio

Safe and efficient value exchanges between endpoint pairs

3 unstable releases

0.2.1 Jul 19, 2020
0.2.0 Jul 19, 2020
0.1.0 Jul 4, 2020

#408 in Asynchronous

38 downloads per month

BlueOak-1.0.0

14KB
246 lines

Scambio

Safe and efficient value exchanges between endpoint pairs.

Documentation is available at

License

This project is licensed under the Blue Oak Model License Version 1.0.0. If you are interested in contributing to this project, please read the file CONTRIBUTING.md first.


lib.rs:

This crate allows asynchronous value exchanges between two endpoints.

Conceptually this is similar to having two channels, each with capacity 1.

Example

Create an exchange between a client A and a server B where A sends u32 values to B and B acknowledges each value with a bool, true if the value is odd and false otherwise.

# async fn doc() {
let (mut a, mut b) = scambio::exchange();

let client = async move {
    for i in 0 .. 10u32 {
        assert!(a.send(i).await.is_ok());
        assert_eq!(Some(i % 2 == 1), a.receive().await)
    }
};

let server = async move {
    while let Some(i) = b.receive().await {
        assert!(b.send(i % 2 == 1).await.is_ok())
    }
};

assert_eq!(futures::join!(client, server), ((), ()));
# }

Dependencies

~540KB
~10K SLoC