tether-agent 4.4.0-alpha

Standardised use of MQTT and MessagePack for inter-process communication
Documentation
use crate::TetherAgent;
use serde::Serialize;

use super::definitions::ChannelSenderDef;

pub struct ChannelSender<T: Serialize> {
    definition: ChannelSenderDef,
    marker: std::marker::PhantomData<T>,
}

impl<T: Serialize> ChannelSender<T> {
    pub fn new(definition: ChannelSenderDef) -> ChannelSender<T> {
        ChannelSender {
            definition,
            marker: std::marker::PhantomData,
        }
    }

    pub fn definition(&self) -> &ChannelSenderDef {
        &self.definition
    }

    pub fn send(&self, tether_agent: &TetherAgent, payload: &T) -> anyhow::Result<()> {
        tether_agent.send(self, payload)
    }

    pub fn send_raw(&self, tether_agent: &TetherAgent, payload: &[u8]) -> anyhow::Result<()> {
        tether_agent.send_raw(self.definition(), Some(payload))
    }
}