/// generic.rs
///
/// This example demonstrates how we can use traits to send values through a
/// channel without actually knowing the type of the value.
extern crate session_types;
use session_types::*;
use std::thread::spawn;
fn srv<A: std::marker::Send + 'static>(x: A, c: Chan<(), Send<A, Eps>>) {
c.send(x).close();
}
fn cli<A: std::marker::Send + std::fmt::Debug + 'static>(c: Chan<(), Recv<A, Eps>>) {
let (c, x) = c.recv();
println!("{:?}", x);
c.close();
}
fn main() {
let (c1, c2) = session_channel();
let t = spawn(move || srv(42u8, c1));
cli(c2);
t.join().unwrap();
}