Skip to main content

micromegas_transit/
dyn_blob.rs

1use crate::{InProcSerialize, InProcSize, read_consume_pod, write_any};
2
3#[derive(Debug)]
4pub struct DynBlob(pub Vec<u8>);
5
6impl InProcSerialize for DynBlob {
7    const IN_PROC_SIZE: InProcSize = InProcSize::Dynamic;
8
9    fn get_value_size(&self) -> Option<u32> {
10        Some(std::mem::size_of::<u32>() as u32 + self.0.len() as u32)
11    }
12
13    fn write_value(&self, buffer: &mut Vec<u8>) {
14        let len = self.0.len() as u32;
15        write_any(buffer, &len);
16        buffer.extend_from_slice(&self.0);
17    }
18
19    #[allow(unsafe_code)]
20    unsafe fn read_value(mut window: &[u8]) -> Self {
21        let len: u32 = read_consume_pod(&mut window);
22        let data = window[..len as usize].to_vec();
23        Self(data)
24    }
25}