sheave_core/messages/
set_data_frame.rs1use std::io::Result as IOResult;
2use crate::{
3 ByteBuffer,
4 Decoder,
5 Encoder
6};
7use super::{
8 Channel,
9 ChunkData,
10 headers::MessageType
11};
12
13#[derive(Debug, Clone, Default, PartialEq, Eq)]
15pub struct SetDataFrame(Vec<u8>);
16
17impl SetDataFrame {
18 pub fn new(bytes: Vec<u8>) -> Self {
20 Self(bytes)
21 }
22}
23
24impl From<SetDataFrame> for Vec<u8> {
25 fn from(set_data_frame: SetDataFrame) -> Self {
26 set_data_frame.0
27 }
28}
29
30impl ChunkData for SetDataFrame {
31 const CHANNEL: Channel = Channel::Audio;
32 const MESSAGE_TYPE: MessageType = MessageType::Data;
33}
34
35impl Decoder<SetDataFrame> for ByteBuffer {
36 fn decode(&mut self) -> IOResult<SetDataFrame> {
79 let remained = self.remained();
80 let bytes = self.get_bytes(remained)?.to_vec();
81 Ok(SetDataFrame(bytes))
82 }
83}
84
85impl Encoder<SetDataFrame> for ByteBuffer {
86 fn encode(&mut self, set_data_frame: &SetDataFrame) {
88 self.put_bytes(&set_data_frame.0);
89 }
90}
91
92#[cfg(test)]
93mod tests {
94 use rand::fill;
95 use super::*;
96
97 #[test]
98 fn decode_set_data_frame() {
99 let mut buffer = ByteBuffer::default();
100 let mut bytes: [u8; 128] = [0; 128];
101 fill(&mut bytes);
102 buffer.put_bytes(&bytes);
103 let result: IOResult<SetDataFrame> = buffer.decode();
104 assert!(result.is_ok());
105 let actual = result.unwrap();
106 let expected = SetDataFrame::new(bytes.to_vec());
107 assert_eq!(expected, actual)
108 }
109
110 #[test]
111 fn encode_set_data_frame() {
112 let mut buffer = ByteBuffer::default();
113 let mut expected_bytes: [u8; 128] = [0; 128];
114 fill(&mut expected_bytes);
115 let expected = SetDataFrame::new(expected_bytes.to_vec());
116 buffer.encode(&expected);
117 let actual_data: Vec<u8> = buffer.into();
118 assert_eq!(expected_bytes.as_slice(), &actual_data)
119 }
120}