use crate::binary::cancel::cancel;
use crate::binary::struct_trait::{send::Send, session::Session};
use std::error::Error;
use std::marker;
use std::panic;
pub fn send<T, S>(x: T, s: Send<T, S>) -> S
where
T: marker::Send,
S: Session,
{
let (here, there) = S::new();
s.channel.send((x, there)).unwrap_or(());
here
}
pub fn send_canceled<T, S>(x: T, s: Send<T, S>) -> Result<S, Box<dyn Error>>
where
T: marker::Send,
S: Session,
{
let (here, there) = S::new();
match s.channel.send((x, there)) {
Ok(_) => Ok(here),
Err(e) => {
cancel(s);
panic!("{}", e.to_string())
}
}
}