Skip to main content

statime_wire/messages/
signalling.rs

1use crate::{Error, common::PortIdentity};
2
3/// Signalling message body
4#[derive(Debug, Clone, PartialEq, Eq)]
5pub struct SignalingMessage {
6    /// Port identity of the intended receiver of this signaling message.
7    pub target_port_identity: PortIdentity,
8}
9
10impl SignalingMessage {
11    pub(crate) fn content_size(&self) -> usize {
12        10
13    }
14
15    pub(crate) fn serialize_content(&self, buffer: &mut [u8]) -> Result<(), Error> {
16        if buffer.len() < 10 {
17            return Err(Error::BufferTooShort);
18        }
19
20        let (left, _) = buffer.split_at_mut(10);
21
22        self.target_port_identity.serialize(left)?;
23
24        Ok(())
25    }
26
27    pub(crate) fn deserialize_content(buffer: &[u8]) -> Result<Self, Error> {
28        let identity_bytes = buffer.get(0..10).ok_or(Error::BufferTooShort)?;
29        let target_port_identity = PortIdentity::deserialize(identity_bytes)?;
30
31        Ok(Self {
32            target_port_identity,
33        })
34    }
35}