rtps_parser/rtps/messages/submessages/
pad.rs

1use 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, // Submessage header
65            ]
66        );
67    }
68
69    #[test]
70    fn deserialize_pad() {
71        #[rustfmt::skip]
72        let submessage = PadSubmessageRead::new(&[
73            0x01, 0b_0000_0001, 0, 0, // Submessage header
74        ]);
75        let expected_endianness_flag = true;
76        assert_eq!(
77            expected_endianness_flag,
78            submessage.submessage_header().flags()[0]
79        );
80    }
81}