Skip to main content

micromegas_tracing/images/
image_events.rs

1use micromegas_transit::{
2    DynBlob, DynString, UserDefinedType, prelude::*, read_advance_string, read_consume_pod,
3};
4use std::sync::Arc;
5
6#[derive(Debug)]
7pub struct ImageEvent {
8    pub time: i64,
9    pub name: DynString,
10    pub format: DynString,
11    pub data: DynBlob,
12}
13
14impl InProcSerialize for ImageEvent {
15    const IN_PROC_SIZE: InProcSize = InProcSize::Dynamic;
16
17    fn get_value_size(&self) -> Option<u32> {
18        Some(
19            std::mem::size_of::<i64>() as u32
20                + self.name.get_value_size().expect("name size")
21                + self.format.get_value_size().expect("format size")
22                + self.data.get_value_size().expect("data size"),
23        )
24    }
25
26    fn write_value(&self, buffer: &mut Vec<u8>) {
27        write_any(buffer, &self.time);
28        self.name.write_value(buffer);
29        self.format.write_value(buffer);
30        self.data.write_value(buffer);
31    }
32
33    #[allow(unsafe_code)]
34    unsafe fn read_value(mut window: &[u8]) -> Self {
35        let time: i64 = read_consume_pod(&mut window);
36        let name = DynString(read_advance_string(&mut window).expect("reading image event name"));
37        let format =
38            DynString(read_advance_string(&mut window).expect("reading image event format"));
39        let len: u32 = read_consume_pod(&mut window);
40        let data = DynBlob(window[..len as usize].to_vec());
41        Self {
42            time,
43            name,
44            format,
45            data,
46        }
47    }
48}
49
50impl Reflect for ImageEvent {
51    fn reflect() -> UserDefinedType {
52        lazy_static::lazy_static! {
53            static ref TYPE_NAME: Arc<String> = Arc::new("ImageEvent".into());
54        }
55        UserDefinedType {
56            name: TYPE_NAME.clone(),
57            size: 0,
58            members: vec![],
59            is_reference: false,
60            secondary_udts: vec![],
61        }
62    }
63}