webrtc_data/message/
message_channel_ack.rs

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