scuffle_rtmp/protocol_control_messages/
reader.rs

1//! Reading protocol control messages.
2
3use std::io::{self, Cursor};
4
5use byteorder::{BigEndian, ReadBytesExt};
6
7use super::{ProtocolControlMessageSetChunkSize, ProtocolControlMessageWindowAcknowledgementSize};
8
9impl ProtocolControlMessageSetChunkSize {
10    /// Reads a [`ProtocolControlMessageSetChunkSize`] from the given data.
11    pub fn read(data: &[u8]) -> io::Result<Self> {
12        let mut cursor = Cursor::new(data);
13        let chunk_size = cursor.read_u32::<BigEndian>()?;
14
15        Ok(Self { chunk_size })
16    }
17}
18
19impl ProtocolControlMessageWindowAcknowledgementSize {
20    /// Reads a [`ProtocolControlMessageWindowAcknowledgementSize`] from the given data.
21    pub fn read(data: &[u8]) -> io::Result<Self> {
22        let mut cursor = Cursor::new(data);
23        let acknowledgement_window_size = cursor.read_u32::<BigEndian>()?;
24
25        Ok(Self {
26            acknowledgement_window_size,
27        })
28    }
29}
30
31#[cfg(test)]
32#[cfg_attr(all(test, coverage_nightly), coverage(off))]
33mod tests {
34    use super::*;
35
36    #[test]
37    fn read_set_chunk_size() {
38        let data = vec![0x00, 0x00, 0x00, 0x01];
39        let chunk_size = ProtocolControlMessageSetChunkSize::read(&data).unwrap();
40        assert_eq!(chunk_size.chunk_size, 1);
41    }
42
43    #[test]
44    fn read_window_acknowledgement_size() {
45        let data = vec![0x00, 0x00, 0x00, 0x01];
46        let window_acknowledgement_size = ProtocolControlMessageWindowAcknowledgementSize::read(&data).unwrap();
47        assert_eq!(window_acknowledgement_size.acknowledgement_window_size, 1);
48    }
49}