sheave_core/messages/
get_stream_length.rs1use std::io::Result as IOResult;
2use super::{
3 Channel,
4 ChunkData,
5 Command,
6 headers::MessageType
7};
8use crate::{
9 Decoder,
10 Encoder,
11 ByteBuffer,
12 messages::amf::v0::{
13 AmfString,
14 Null
15 }
16};
17
18#[derive(Debug, Clone, PartialEq)]
20pub struct GetStreamLength(AmfString);
21
22impl GetStreamLength {
23 pub fn new(topic_path: AmfString) -> Self {
25 Self(topic_path)
26 }
27
28 pub fn get_topic_path(&self) -> &AmfString {
30 &self.0
31 }
32}
33
34impl From<GetStreamLength> for AmfString {
35 fn from(get_stream_length: GetStreamLength) -> Self {
36 get_stream_length.0
37 }
38}
39
40impl ChunkData for GetStreamLength {
41 const CHANNEL: Channel = Channel::Source;
42 const MESSAGE_TYPE: MessageType = MessageType::Command;
43}
44
45impl Command for GetStreamLength {}
46
47impl Decoder<GetStreamLength> for ByteBuffer {
48 fn decode(&mut self) -> IOResult<GetStreamLength> {
93 Decoder::<Null>::decode(self)?;
94 let topic_path: AmfString = self.decode()?;
95 Ok(GetStreamLength(topic_path))
96 }
97}
98
99impl Encoder<GetStreamLength> for ByteBuffer {
100 fn encode(&mut self, get_stream_length: &GetStreamLength) {
102 self.encode(&Null);
103 self.encode(get_stream_length.get_topic_path());
104 }
105}
106
107#[cfg(test)]
108mod tests {
109 use super::*;
110
111 #[test]
112 fn decode_get_stream_length() {
113 let mut buffer = ByteBuffer::default();
114 buffer.encode(&Null);
115 buffer.encode(&AmfString::default());
116 let result: IOResult<GetStreamLength> = buffer.decode();
117 assert!(result.is_ok());
118 let actual = result.unwrap();
119 let expected = GetStreamLength::new(AmfString::default());
120 assert_eq!(expected, actual)
121 }
122
123 #[test]
124 fn encode_get_stream_length() {
125 let mut buffer = ByteBuffer::default();
126 let expected_topic_path = "";
127 let expected = GetStreamLength::new(AmfString::from(expected_topic_path));
128 buffer.encode(&expected);
129 Decoder::<Null>::decode(&mut buffer).unwrap();
130 let actual_topic_path: AmfString = buffer.decode().unwrap();
131 assert_eq!(expected_topic_path, actual_topic_path)
132 }
133}