rtc_datachannel/message/
message_channel_ack.rs

1use super::*;
2use shared::error::Result;
3
4/// The data-part of an data-channel ACK message without the message type.
5///
6/// # Memory layout
7///
8/// ```plain
9/// 0                   1                   2                   3
10/// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
11///+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12///|  Message Type |
13///+-+-+-+-+-+-+-+-+
14/// ```
15#[derive(Eq, PartialEq, Clone, Debug)]
16pub struct DataChannelAck;
17
18impl MarshalSize for DataChannelAck {
19    fn marshal_size(&self) -> usize {
20        0
21    }
22}
23
24impl Marshal for DataChannelAck {
25    fn marshal_to(&self, _buf: &mut [u8]) -> Result<usize> {
26        Ok(0)
27    }
28}
29
30impl Unmarshal for DataChannelAck {
31    fn unmarshal<B>(_buf: &mut B) -> Result<Self>
32    where
33        Self: Sized,
34        B: Buf,
35    {
36        Ok(Self)
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use bytes::{Bytes, BytesMut};
43
44    use super::*;
45
46    #[test]
47    fn test_channel_ack_unmarshal() -> Result<()> {
48        let mut bytes = Bytes::from_static(&[]);
49
50        let channel_ack = DataChannelAck::unmarshal(&mut bytes)?;
51
52        assert_eq!(channel_ack, DataChannelAck);
53        Ok(())
54    }
55
56    #[test]
57    fn test_channel_ack_marshal_size() -> Result<()> {
58        let channel_ack = DataChannelAck;
59        let marshal_size = channel_ack.marshal_size();
60
61        assert_eq!(marshal_size, 0);
62        Ok(())
63    }
64
65    #[test]
66    fn test_channel_ack_marshal() -> Result<()> {
67        let channel_ack = DataChannelAck;
68        let mut buf = BytesMut::with_capacity(0);
69        let bytes_written = channel_ack.marshal_to(&mut buf)?;
70        let bytes = buf.freeze();
71
72        assert_eq!(bytes_written, channel_ack.marshal_size());
73        assert_eq!(&bytes[..], &[]);
74        Ok(())
75    }
76}