protocol_variable_transfer/
protocol_variable_transfer.rs1#![allow(unused_variables)]
2use colink::{CoLink, Participant, ProtocolEntry};
3
4struct Initiator;
5#[colink::async_trait]
6impl ProtocolEntry for Initiator {
7 async fn start(
8 &self,
9 cl: CoLink,
10 param: Vec<u8>,
11 participants: Vec<Participant>,
12 ) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
13 println!("initiator");
14 cl.send_variable("output", ¶m, &[participants[1].clone()])
15 .await?;
16 Ok(())
17 }
18}
19
20struct Receiver;
21#[colink::async_trait]
22impl ProtocolEntry for Receiver {
23 async fn start(
24 &self,
25 cl: CoLink,
26 param: Vec<u8>,
27 participants: Vec<Participant>,
28 ) -> Result<(), Box<dyn std::error::Error + Send + Sync + 'static>> {
29 let msg = cl.recv_variable("output", &participants[0]).await?;
30 println!("{}", String::from_utf8_lossy(&msg));
31 cl.create_entry(&format!("tasks:{}:output", cl.get_task_id()?), &msg)
32 .await?;
33 Ok(())
34 }
35}
36
37colink::protocol_start!(
38 ("variable_transfer_example:initiator", Initiator),
39 ("variable_transfer_example:receiver", Receiver)
40);