rtps_parser/rtps/messages/submessages/
pad.rs1use crate::rtps::messages::{
2 overall_structure::{
3 Submessage, SubmessageHeader, SubmessageHeaderRead, SubmessageHeaderWrite,
4 },
5 submessage_elements::SubmessageElement,
6 types::SubmessageKind,
7};
8
9#[derive(Debug, PartialEq, Eq)]
10pub struct PadSubmessageRead<'a> {
11 data: &'a [u8],
12}
13
14impl SubmessageHeader for PadSubmessageRead<'_> {
15 fn submessage_header(&self) -> SubmessageHeaderRead {
16 SubmessageHeaderRead::new(self.data)
17 }
18}
19
20impl<'a> PadSubmessageRead<'a> {
21 pub fn new(data: &'a [u8]) -> Self {
22 Self { data }
23 }
24}
25
26#[derive(Debug, PartialEq, Eq)]
27pub struct PadSubmessageWrite {}
28
29impl PadSubmessageWrite {
30 pub fn new() -> Self {
31 Self {}
32 }
33}
34
35impl Default for PadSubmessageWrite {
36 fn default() -> Self {
37 Self::new()
38 }
39}
40impl<'a> Submessage<'a> for PadSubmessageWrite {
41 type SubmessageList = &'a [SubmessageElement<'a>];
42
43 fn submessage_header(&self, octets_to_next_header: u16) -> SubmessageHeaderWrite {
44 SubmessageHeaderWrite::new(SubmessageKind::PAD, &[], octets_to_next_header)
45 }
46
47 fn submessage_elements(&self) -> Self::SubmessageList {
48 &[]
49 }
50}
51
52#[cfg(test)]
53mod tests {
54 use super::*;
55 use crate::rtps::messages::overall_structure::{
56 into_bytes_vec, RtpsSubmessageWriteKind,
57 };
58
59 #[test]
60 fn serialize_pad() {
61 let submessage = RtpsSubmessageWriteKind::Pad(PadSubmessageWrite::new());
62 #[rustfmt::skip]
63 assert_eq!(into_bytes_vec(submessage), vec![
64 0x01, 0b_0000_0001, 0, 0, ]
66 );
67 }
68
69 #[test]
70 fn deserialize_pad() {
71 #[rustfmt::skip]
72 let submessage = PadSubmessageRead::new(&[
73 0x01, 0b_0000_0001, 0, 0, ]);
75 let expected_endianness_flag = true;
76 assert_eq!(
77 expected_endianness_flag,
78 submessage.submessage_header().flags()[0]
79 );
80 }
81}