sheave_core/messages/
delete_stream.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 Number,
14 Null
15 }
16};
17
18#[derive(Debug, Clone, Copy, PartialEq)]
20pub struct DeleteStream(Number);
21
22impl DeleteStream {
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<DeleteStream> for u32 {
35 fn from(delete_stream: DeleteStream) -> Self {
36 delete_stream.0.as_integer() as u32
37 }
38}
39
40impl ChunkData for DeleteStream {
41 const CHANNEL: Channel = Channel::System;
42 const MESSAGE_TYPE: MessageType = MessageType::Command;
43}
44
45impl Command for DeleteStream {}
46
47impl Decoder<DeleteStream> for ByteBuffer {
48 fn decode(&mut self) -> IOResult<DeleteStream> {
88 Decoder::<Null>::decode(self)?;
89 let message_id: Number = self.decode()?;
90
91 Ok(DeleteStream(message_id))
92 }
93}
94
95impl Encoder<DeleteStream> for ByteBuffer {
96 fn encode(&mut self, delete_stream: &DeleteStream) {
98 self.encode(&Null);
99 self.encode(&delete_stream.get_message_id());
100 }
101}
102
103#[cfg(test)]
104mod tests {
105 use super::*;
106
107 #[test]
108 fn decode_delete_stream() {
109 let mut buffer = ByteBuffer::default();
110 buffer.encode(&Null);
111 buffer.encode(&Number::default());
112
113 let result: IOResult<DeleteStream> = buffer.decode();
114 assert!(result.is_ok());
115 let actual = result.unwrap();
116 let expected = DeleteStream::new(Number::default());
117 assert_eq!(expected, actual)
118 }
119
120 #[test]
121 fn encode_delete_stream() {
122 let mut buffer = ByteBuffer::default();
123 let expected_message_id = 0f64;
124 let expected = DeleteStream::new(Number::new(expected_message_id));
125 buffer.encode(&expected);
126 Decoder::<Null>::decode(&mut buffer).unwrap();
127 let actual_message_id: Number = buffer.decode().unwrap();
128 assert_eq!(expected_message_id, actual_message_id)
129 }
130}