sheave_core/messages/
release_stream_result.rs

1use 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::Null,
13};
14
15/// The response message for ReleaseStream requests.
16#[derive(Debug, Clone, PartialEq)]
17pub struct ReleaseStreamResult;
18
19impl ChunkData for ReleaseStreamResult {
20    const CHANNEL: Channel = Channel::System;
21    const MESSAGE_TYPE: MessageType = MessageType::Command;
22}
23
24impl Command for ReleaseStreamResult {}
25
26impl Decoder<ReleaseStreamResult> for ByteBuffer {
27    /// Decodes bytes into a ReleaseStreamResult command.
28    ///
29    /// # Errors
30    ///
31    /// * [`InsufficientBufferLength`]
32    ///
33    /// When some field misses.
34    ///
35    /// * [`InconsistentMarker`]
36    ///
37    /// When some value is inconsistent with its marker.
38    ///
39    /// # Examples
40    ///
41    /// ```rust
42    /// use sheave_core::{
43    ///     ByteBuffer,
44    ///     Decoder,
45    ///     Encoder,
46    ///     messages::{
47    ///         ReleaseStreamResult,
48    ///         amf::v0::Null,
49    ///     }
50    /// };
51    ///
52    /// let mut buffer = ByteBuffer::default();
53    /// buffer.encode(&Null);
54    /// assert!(Decoder::<ReleaseStreamResult>::decode(&mut buffer).is_ok());
55    ///
56    /// let mut buffer = ByteBuffer::default();
57    /// assert!(Decoder::<ReleaseStreamResult>::decode(&mut buffer).is_err())
58    /// ```
59    ///
60    /// [`InsufficientBufferLength`]: crate::byte_buffer::InsufficientBufferLength
61    /// [`InconsistentMarker`]: crate::messages::amf::InconsistentMarker
62    fn decode(&mut self) -> IOResult<ReleaseStreamResult> {
63        Decoder::<Null>::decode(self)?;
64        Ok(ReleaseStreamResult)
65    }
66}
67
68impl Encoder<ReleaseStreamResult> for ByteBuffer {
69    /// Encodes a ReleaseStreamResult command into bytes.
70    fn encode(&mut self, _: &ReleaseStreamResult) {
71        self.encode(&Null);
72    }
73}
74
75#[cfg(test)]
76mod tests {
77    use super::*;
78
79    #[test]
80    fn decode_release_stream_result() {
81        let mut buffer = ByteBuffer::default();
82        buffer.encode(&Null);
83        let result: IOResult<ReleaseStreamResult> = buffer.decode();
84        assert!(result.is_ok());
85        let actual = result.unwrap();
86        let expected = ReleaseStreamResult;
87        assert_eq!(expected, actual)
88    }
89
90    #[test]
91    fn encode_release_stream_result() {
92        let mut buffer = ByteBuffer::default();
93        let expected = ReleaseStreamResult;
94        buffer.encode(&expected);
95        assert!(Decoder::<ReleaseStreamResult>::decode(&mut buffer).is_ok())
96    }
97}