protocol_variable_transfer/
protocol_variable_transfer.rs

1#![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", &param, &[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);