pub trait Returnval {
type Sender<T>;
type Receiver<T>;
type SendError;
type RecvResult<T>;
// Required methods
fn create<T>() -> (Self::Sender<T>, Self::Receiver<T>);
fn send<T>(tx: Self::Sender<T>, msg: T) -> Result<(), Self::SendError>;
fn recv<T>(rx: Self::Receiver<T>) -> Self::RecvResult<T>;
}