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> {
82 let remained = self.remained();
83 let bytes = self.get_bytes(remained)?.to_vec();
84 Ok(SetDataFrame(bytes))
85 }
86}
87
88impl Encoder<SetDataFrame> for ByteBuffer {
89 fn encode(&mut self, set_data_frame: &SetDataFrame) {
91 self.put_bytes(&set_data_frame.0);
92 }
93}
94
95#[cfg(test)]
96mod tests {
97 use rand::{
98 Fill,
99 thread_rng
100 };
101 use super::*;
102
103 #[test]
104 fn decode_set_data_frame() {
105 let mut buffer = ByteBuffer::default();
106 let mut bytes: [u8; 128] = [0; 128];
107 bytes.try_fill(&mut thread_rng()).unwrap();
108 buffer.put_bytes(&bytes);
109 let result: IOResult<SetDataFrame> = buffer.decode();
110 assert!(result.is_ok());
111 let actual = result.unwrap();
112 let expected = SetDataFrame::new(bytes.to_vec());
113 assert_eq!(expected, actual)
114 }
115
116 #[test]
117 fn encode_set_data_frame() {
118 let mut buffer = ByteBuffer::default();
119 let mut expected_bytes: [u8; 128] = [0; 128];
120 expected_bytes.try_fill(&mut thread_rng()).unwrap();
121 let expected = SetDataFrame::new(expected_bytes.to_vec());
122 buffer.encode(&expected);
123 let actual_data: Vec<u8> = buffer.into();
124 assert_eq!(expected_bytes.as_slice(), &actual_data)
125 }
126}