sheave_core/messages/
set_buffer_length.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)]
26pub struct SetBufferLength(u32, u32);
27
28impl SetBufferLength {
29 pub fn new(message_id: u32, buffering_time: u32) -> Self {
31 Self(message_id, buffering_time)
32 }
33
34 pub fn get_message_id(&self) -> u32 {
36 self.0
37 }
38
39 pub fn get_buffering_time(&self) -> u32 {
41 self.1
42 }
43}
44
45impl From<SetBufferLength> for (u32, u32) {
46 fn from(set_buffer_length: SetBufferLength) -> Self {
47 (set_buffer_length.0, set_buffer_length.1)
48 }
49}
50
51impl ChunkData for SetBufferLength {
52 const CHANNEL: Channel = Channel::Network;
53 const MESSAGE_TYPE: MessageType = MessageType::UserControl;
54}
55
56impl UserControl for SetBufferLength {
57 const EVENT_TYPE: EventType = EventType::SetBufferLength;
58}
59
60impl Decoder<SetBufferLength> for ByteBuffer {
61 fn decode(&mut self) -> IOResult<SetBufferLength> {
93 let message_id = self.get_u32_be()?;
94 let buffering_time = self.get_u32_be()?;
95 Ok(SetBufferLength(message_id, buffering_time))
96 }
97}
98
99impl Encoder<SetBufferLength> for ByteBuffer {
100 fn encode(&mut self, set_buffer_length: &SetBufferLength) {
102 self.put_u32_be(set_buffer_length.get_message_id());
103 self.put_u32_be(set_buffer_length.get_buffering_time());
104 }
105}
106
107#[cfg(test)]
108mod tests {
109 use super::*;
110
111 #[test]
112 fn decode_set_buffer_length() {
113 let mut buffer = ByteBuffer::default();
114 buffer.put_u32_be(u32::default());
115 buffer.put_u32_be(u32::default());
116 let result: IOResult<SetBufferLength> = buffer.decode();
117 assert!(result.is_ok());
118 let actual = result.unwrap();
119 let expected = SetBufferLength::new(u32::default(), u32::default());
120 assert_eq!(expected, actual)
121 }
122
123 #[test]
124 fn encode_set_buffer_length() {
125 let mut buffer = ByteBuffer::default();
126 let expected_message_id = u32::default();
127 let expected_buffering_time = u32::default();
128 let expected = SetBufferLength::new(expected_message_id, expected_buffering_time);
129 buffer.encode(&expected);
130 let actual_message_id = buffer.get_u32_be().unwrap();
131 assert_eq!(expected_message_id, actual_message_id);
132 let actual_buffering_time = buffer.get_u32_be().unwrap();
133 assert_eq!(expected_buffering_time, actual_buffering_time)
134 }
135}