colink 0.3.10

CoLink Rust SDK
Documentation
use crate::colink_proto::*;
use std::sync::Arc;
pub(crate) mod p2p_inbox;
mod remote_storage;
mod tls_utils;

type Error = Box<dyn std::error::Error + Send + Sync + 'static>;

impl crate::application::CoLink {
    #[deprecated(note = "please use `send_variable` instead")]
    pub async fn set_variable(
        &self,
        key: &str,
        payload: &[u8],
        receivers: &[Participant],
    ) -> Result<(), Error> {
        self.send_variable(key, payload, receivers).await
    }

    pub async fn send_variable(
        &self,
        key: &str,
        payload: &[u8],
        receivers: &[Participant],
    ) -> Result<(), Error> {
        if self.task_id.is_empty() {
            Err("task_id not found".to_string())?;
        }
        let payload = Arc::new(payload.to_vec());
        for receiver in receivers {
            let cl = self.clone();
            let key = key.to_string();
            let payload = payload.clone();
            let receiver = receiver.clone();
            tokio::spawn(async move {
                if cl
                    ._send_variable_p2p(&key, &payload, &receiver)
                    .await
                    .is_err()
                {
                    cl.send_variable_with_remote_storage(&key, &payload, &[receiver.clone()])
                        .await?;
                }
                Ok::<(), Box<dyn std::error::Error + Send + Sync + 'static>>(())
            });
        }
        Ok(())
    }

    #[deprecated(note = "please use `recv_variable` instead")]
    pub async fn get_variable(&self, key: &str, sender: &Participant) -> Result<Vec<u8>, Error> {
        self.recv_variable(key, sender).await
    }

    pub async fn recv_variable(&self, key: &str, sender: &Participant) -> Result<Vec<u8>, Error> {
        if self.task_id.is_empty() {
            Err("task_id not found".to_string())?;
        }
        if let Ok(res) = self._recv_variable_p2p(key, sender).await {
            return Ok(res);
        }
        let res = self.recv_variable_with_remote_storage(key, sender).await?;
        Ok(res)
    }
}