sestring/payload/
raw.rs

1use crate::{Error, payload::{Decode, Encode}, Payload};
2use std::io::{Read, Seek};
3
4#[derive(Debug, Clone, PartialEq)]
5pub struct RawPayload(pub Vec<u8>);
6
7impl AsRef<[u8]> for RawPayload {
8    fn as_ref(&self) -> &[u8] {
9        &self.0
10    }
11}
12
13impl Decode for RawPayload {
14    fn decode<R: Read + Seek>(mut reader: R, chunk_len: usize) -> Result<Self, Error> {
15        let mut data = vec![0; chunk_len];
16        reader.read_exact(&mut data).map_err(Error::from)?;
17
18        Ok(Self(data))
19    }
20}
21
22impl Encode for RawPayload {
23    fn encode(&self) -> Vec<u8> {
24        use std::iter::once;
25
26        once(Payload::START_BYTE)
27            .chain(self.0.iter().copied())
28            .chain(once(Payload::END_BYTE))
29            .collect()
30    }
31}