micromegas_transit/
dyn_blob.rs1use 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}