rustdds 0.7.11

Native Rust DDS implementation with RTPS
Documentation
use std::{fmt, fmt::Debug};

use speedy::{Readable, Writable};

#[derive(PartialEq, Eq, Readable, Writable, Clone, Copy)]
pub struct SubmessageKind {
  value: u8,
}

impl From<SubmessageKind> for u8 {
  fn from(s: SubmessageKind) -> Self {
    s.value
  }
}

impl SubmessageKind {
  pub const PAD: Self = Self { value: 0x01 };
  pub const ACKNACK: Self = Self { value: 0x06 };
  pub const HEARTBEAT: Self = Self { value: 0x07 };
  pub const GAP: Self = Self { value: 0x08 };
  pub const INFO_TS: Self = Self { value: 0x09 };
  pub const INFO_SRC: Self = Self { value: 0x0c };
  pub const INFO_REPLY_IP4: Self = Self { value: 0x0d };
  pub const INFO_DST: Self = Self { value: 0x0e };
  pub const INFO_REPLY: Self = Self { value: 0x0f };
  pub const NACK_FRAG: Self = Self { value: 0x12 };
  pub const HEARTBEAT_FRAG: Self = Self { value: 0x13 };
  pub const DATA: Self = Self { value: 0x15 };
  pub const DATA_FRAG: Self = Self { value: 0x16 };
}

impl Debug for SubmessageKind {
  fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
    match *self {
      Self::PAD => fmt.write_str("PAD"),
      Self::ACKNACK => fmt.write_str("ACKNACK"),
      Self::HEARTBEAT => fmt.write_str("HEARTBEAT"),
      Self::GAP => fmt.write_str("GAP"),
      Self::INFO_TS => fmt.write_str("INFO_TS"),
      Self::INFO_SRC => fmt.write_str("INFO_SRC"),
      Self::INFO_REPLY_IP4 => fmt.write_str("INFO_REPLY_IP4"),
      Self::INFO_DST => fmt.write_str("INFO_DST"),
      Self::INFO_REPLY => fmt.write_str("INFO_REPLY"),
      Self::NACK_FRAG => fmt.write_str("NACK_FRAG"),
      Self::HEARTBEAT_FRAG => fmt.write_str("HEARTBEAT_FRAG"),
      Self::DATA => fmt.write_str("DATA"),
      Self::DATA_FRAG => fmt.write_str("DATA_FRAG"),
      Self { value: other } => fmt.write_fmt(format_args!("SubmessageKind {} (UNKNOWN!)", other)),
    }
  }
}

#[cfg(test)]
mod tests {
  use super::*;

  serialization_test!( type = SubmessageKind,
  {
      submessage_kind_pad,
      SubmessageKind::PAD,
      le = [0x01],
      be = [0x01]
  },
  {
      submessage_kind_acknack,
      SubmessageKind::ACKNACK,
      le = [0x06],
      be = [0x06]
  },
  {
      submessage_kind_heartbeat,
      SubmessageKind::HEARTBEAT,
      le = [0x07],
      be = [0x07]
  },
  {
      submessage_kind_gap,
      SubmessageKind::GAP,
      le = [0x08],
      be = [0x08]
  },
  {
      submessage_kind_info_ts,
      SubmessageKind::INFO_TS,
      le = [0x09],
      be = [0x09]
  },
  {
      submessage_kind_info_src,
      SubmessageKind::INFO_SRC,
      le = [0x0c],
      be = [0x0c]
  },
  {
      submessage_kind_info_replay_ip4,
      SubmessageKind::INFO_REPLY_IP4,
      le = [0x0d],
      be = [0x0d]
  },
  {
      submessage_kind_info_dst,
      SubmessageKind::INFO_DST,
      le = [0x0e],
      be = [0x0e]
  },
  {
      submessage_kind_info_replay,
      SubmessageKind::INFO_REPLY,
      le = [0x0f],
      be = [0x0f]
  },
  {
      submessage_kind_nack_frag,
      SubmessageKind::NACK_FRAG,
      le = [0x12],
      be = [0x12]
  },
  {
      submessage_kind_heartbeat_frag,
      SubmessageKind::HEARTBEAT_FRAG,
      le = [0x13],
      be = [0x13]
  },
  {
      submessage_kind_data,
      SubmessageKind::DATA,
      le = [0x15],
      be = [0x15]
  },
  {
      submessage_kind_data_frag,
      SubmessageKind::DATA_FRAG,
      le = [0x16],
      be = [0x16]
  });
}