A library for deadlock-free session-typed communication in Rust.
```rust extern crate rand; extern crate sesh;
use rand::{Rng, thread_rng}; use sesh::*; use std::boxed::Box; use std::error::Error;
type NegSrv = Recv
type CalcSrv = Recv
fn server(s: CalcSrv) -> Result<(), Box
fn server_works() {
assert!(|| -> Result<(), Box
// Pick some random numbers.
let mut rng = thread_rng();
// Test the negation function.
{
let s: CalcCli = fork(server);
let x: i64 = rng.gen();
let s = choose!(CalcOp::Neg, s);
let s = send(x, s);
let (y, s) = recv(s)?;
close(s)?;
assert_eq!(-x, y);
}
// Test the addition function.
{
let s: CalcCli = fork(server);
let x: i64 = rng.gen();
let y: i64 = rng.gen();
let s = choose!(CalcOp::Add, s);
let s = send(x, s);
let s = send(y, s);
let (z, s) = recv(s)?;
close(s)?;
assert_eq!(x.wrapping_add(y), z);
}
Ok(())
}().is_ok());
} ```