sheave_core/messages/
get_stream_length_result.rs1use std::io::Result as IOResult;
2use crate::{
3 ByteBuffer,
4 Decoder,
5 Encoder,
6 messages::{
7 Channel,
8 ChunkData,
9 Command,
10 amf::v0::{
11 Number,
12 Null
13 },
14 headers::MessageType
15 }
16};
17
18#[derive(Debug, Clone, Copy, PartialEq)]
22pub struct GetStreamLengthResult(Number);
23
24impl GetStreamLengthResult {
25 pub fn new(duration: Number) -> Self {
27 Self(duration)
28 }
29
30 pub fn get_duration(&self) -> Number {
32 self.0
33 }
34}
35
36impl ChunkData for GetStreamLengthResult {
37 const CHANNEL: Channel = Channel::Source;
38 const MESSAGE_TYPE: MessageType = MessageType::Command;
39}
40
41impl Command for GetStreamLengthResult {}
42
43impl Decoder<GetStreamLengthResult> for ByteBuffer {
44 fn decode(&mut self) -> IOResult<GetStreamLengthResult> {
84 Decoder::<Null>::decode(self)?;
85 let duration: Number = self.decode()?;
86 Ok(GetStreamLengthResult(duration))
87 }
88}
89
90impl Encoder<GetStreamLengthResult> for ByteBuffer {
91 fn encode(&mut self, get_stream_length_result: &GetStreamLengthResult) {
93 self.encode(&Null);
94 self.encode(&get_stream_length_result.get_duration());
95 }
96}
97
98#[cfg(test)]
99mod tests {
100 use super::*;
101
102 #[test]
103 fn decode_get_stream_length_result() {
104 let mut buffer = ByteBuffer::default();
105 buffer.encode(&Null);
106 buffer.encode(&Number::default());
107 let result: IOResult<GetStreamLengthResult> = buffer.decode();
108 assert!(result.is_ok());
109 let actual = result.unwrap();
110 let expected = GetStreamLengthResult::new(Nmber::default());
111 assert_eq!(expected, actual)
112 }
113
114 #[test]
115 fn encode_get_stream_length_result() {
116 let mut buffer = ByteBuffer::default();
117 let expected_duration = 0f64;
118 buffer.encode(&GetStreamLengthResult::new(Number::new(expected_duration)));
119 Decoder::<Null>::decode(&mut buffer).unwrap();
120 let actual_duration: Number = buffer.decode().unwrap();
121 assert_eq!(expected_duration, actual_duration)
122 }
123}