sheave_core/messages/
stream_begin.rs1use std::io::Result as IOResult;
2use crate::{
3 ByteBuffer,
4 Decoder,
5 Encoder,
6 messages::{
7 Channel,
8 ChunkData,
9 EventType,
10 UserControl,
11 headers::MessageType,
12 }
13};
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub struct StreamBegin(u32);
26
27impl StreamBegin {
28 pub fn new(message_id: u32) -> Self {
30 Self(message_id)
31 }
32
33 pub fn get_message_id(&self) -> u32 {
35 self.0
36 }
37}
38
39impl From<StreamBegin> for u32 {
40 fn from(stream_begin: StreamBegin) -> Self {
41 stream_begin.0
42 }
43}
44
45impl ChunkData for StreamBegin {
46 const CHANNEL: Channel = Channel::Network;
47 const MESSAGE_TYPE: MessageType = MessageType::UserControl;
48}
49
50impl UserControl for StreamBegin {
51 const EVENT_TYPE: EventType = EventType::StreamBegin;
52}
53
54impl Decoder<StreamBegin> for ByteBuffer {
55 fn decode(&mut self) -> IOResult<StreamBegin> {
86 self.get_u32_be().map(StreamBegin)
87 }
88}
89
90impl Encoder<StreamBegin> for ByteBuffer {
91 fn encode(&mut self, stream_begin: &StreamBegin) {
93 self.put_u32_be(stream_begin.get_message_id());
94 }
95}
96
97#[cfg(test)]
98mod tests {
99 use super::*;
100
101 #[test]
102 fn decode_stream_begin() {
103 let mut buffer = ByteBuffer::default();
104 buffer.put_u32_be(u32::default());
105 let result: IOResult<StreamBegin> = buffer.decode();
106 assert!(result.is_ok());
107 let actual = result.unwrap();
108 let expected = StreamBegin::new(u32::default());
109 assert_eq!(expected, actual)
110 }
111
112 #[test]
113 fn encode_stream_begin() {
114 let mut buffer = ByteBuffer::default();
115 let expected_message_id = u32::default();
116 let expected = StreamBegin::new(expected_message_id);
117 buffer.encode(&expected);
118 let actual_message_id = buffer.get_u32_be().unwrap();
119 assert_eq!(expected_message_id, actual_message_id)
120 }
121}