#[test]
fn interact_simple(){
pub struct Actor;
#[interthread::actor(debut,interact)]
impl Actor {
pub fn new() -> Self { Self{} }
pub fn needs_sender(&self, (a,b,..):(u8,u8,u8), inter_send: oneshot::Sender<String>){
let _ = inter_send.send(format!("{a}-{b}"));
}
pub fn needs_receiver(&self, [ref a @ .., b]: [u8;4],inter_recv: oneshot::Receiver<oneshot::Sender<String>>){
let sender = inter_recv.recv().unwrap();
let _ = sender.send(format!("{a:?}-{b}"));
}
pub fn needs_name_and_state(&mut self, mut inter_name: String, inter_state: u8 ) -> String {
inter_name += &format!("-{inter_state}");
inter_name
}
}
impl ActorLive {
fn inter_get_state(&self)-> u8 { 121 }
}
let mut act = ActorLive::new();
assert_eq!(
act.needs_sender((1,2,3u8)).recv().unwrap(),
"1-2".to_string()
);
let sender = act.needs_receiver([1,2,3,4u8]);
let (send,recv) = oneshot::channel::<String>();
let _ = sender.send(send);
assert_eq!(
recv.recv().unwrap(),
"[1, 2, 3]-4".to_string()
);
act.inter_set_name("Cloud");
assert_eq!(
act.needs_name_and_state(),
"Cloud-121".to_string()
)
}