scuffle_rtmp/user_control_messages/
writer.rs1use std::io;
4
5use byteorder::{BigEndian, WriteBytesExt};
6
7use super::{EventMessageStreamBegin, EventType};
8use crate::chunk::Chunk;
9use crate::chunk::writer::ChunkWriter;
10use crate::messages::MessageType;
11
12impl EventMessageStreamBegin {
13 pub fn write(&self, writer: &ChunkWriter, io: &mut impl io::Write) -> io::Result<()> {
15 let mut data = Vec::new();
16
17 data.write_u16::<BigEndian>(EventType::StreamBegin.0).expect("write u16");
18 data.write_u32::<BigEndian>(self.stream_id).expect("write u32");
19
20 writer.write_chunk(io, Chunk::new(0x02, 0, MessageType::UserControlEvent, 0, data.into()))?;
21
22 Ok(())
23 }
24}
25
26#[cfg(test)]
27#[cfg_attr(all(test, coverage_nightly), coverage(off))]
28mod tests {
29 use bytes::{BufMut, Bytes, BytesMut};
30
31 use crate::chunk::reader::ChunkReader;
32 use crate::chunk::writer::ChunkWriter;
33 use crate::user_control_messages::EventMessageStreamBegin;
34
35 #[test]
36 fn test_write_stream_begin() {
37 let mut buf = BytesMut::new();
38 let writer = ChunkWriter::default();
39
40 EventMessageStreamBegin { stream_id: 1 }
41 .write(&writer, &mut (&mut buf).writer())
42 .unwrap();
43
44 let mut reader = ChunkReader::default();
45
46 let chunk = reader.read_chunk(&mut buf).expect("read chunk").expect("chunk");
47 assert_eq!(chunk.basic_header.chunk_stream_id, 0x02);
48 assert_eq!(chunk.message_header.msg_type_id.0, 0x04);
49 assert_eq!(chunk.message_header.msg_stream_id, 0);
50 assert_eq!(chunk.payload, Bytes::from(vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x01]));
51 }
52}