micromegas_tracing/images/
image_events.rs1use 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}