sheave_core/messages/
create_stream_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)]
20pub struct CreateStreamResult(Number);
21
22impl CreateStreamResult {
23 pub fn new(message_id: Number) -> Self {
25 Self(message_id)
26 }
27
28 pub fn get_message_id(&self) -> Number {
30 self.0
31 }
32}
33
34impl From<CreateStreamResult> for u32 {
35 fn from(create_stream_result: CreateStreamResult) -> Self {
36 create_stream_result.0.as_integer() as u32
37 }
38}
39
40impl ChunkData for CreateStreamResult {
41 const CHANNEL: Channel = Channel::System;
42 const MESSAGE_TYPE: MessageType = MessageType::Command;
43}
44
45impl Command for CreateStreamResult {}
46
47impl Decoder<CreateStreamResult> for ByteBuffer {
48 fn decode(&mut self) -> IOResult<CreateStreamResult> {
88 Decoder::<Null>::decode(self)?;
89 let message_id: Number = self.decode()?;
90 Ok(CreateStreamResult(message_id))
91 }
92}
93
94impl Encoder<CreateStreamResult> for ByteBuffer {
95 fn encode(&mut self, create_stream_result: &CreateStreamResult) {
97 self.encode(&Null);
98 self.encode(&create_stream_result.get_message_id());
99 }
100}
101
102#[cfg(test)]
103mod tests {
104 use super::*;
105
106 #[test]
107 fn decode_create_stream_result() {
108 let mut buffer = ByteBuffer::default();
109 buffer.encode(&Null);
110 buffer.encode(&Number::default());
111 let result: IOResult<CreateStreamResult> = buffer.decode();
112 assert!(result.is_ok());
113 let actual = result.unwrap();
114 let expected = CreateStreamResult::new(Number::default());
115 assert_eq!(expected, actual)
116 }
117
118 #[test]
119 fn encode_create_stream_result() {
120 let mut buffer = ByteBuffer::default();
121 let expected_message_id = 0f64;
122 buffer.encode(&CreateStreamResult::new(Number::new(expected_message_id)));
123 Decoder::<Null>::decode(&mut buffer).unwrap();
124 let actual_message_id: Number = buffer.decode().unwrap();
125 assert_eq!(expected_message_id, actual_message_id)
126 }
127}