tracing_tape/record/
event.rs

1use zerocopy::{little_endian, AsBytes, FromBytes, FromZeroes, Unaligned};
2
3use super::{record_kind, RecordHeader};
4
5#[derive(Debug, Clone, Copy, AsBytes, FromZeroes, FromBytes, Unaligned)]
6#[repr(C)]
7pub struct EventRecord {
8    pub header: RecordHeader,
9    pub value_count: little_endian::U16,
10    pub timestamp: little_endian::I64,
11    pub callsite_id: little_endian::U64,
12    pub thread_id: little_endian::U64,
13}
14
15impl EventRecord {
16    pub fn new(value_count: u16, timestamp: i64, callsite_id: u64, thread_id: u64) -> Self {
17        EventRecord {
18            header: RecordHeader::new(record_kind::EVENT, std::mem::size_of::<Self>() as u16),
19            value_count: value_count.into(),
20            timestamp: timestamp.into(),
21            callsite_id: callsite_id.into(),
22            thread_id: thread_id.into(),
23        }
24    }
25}
26
27#[derive(Debug, Clone, Copy, AsBytes, FromZeroes, FromBytes, Unaligned)]
28#[repr(C)]
29pub struct EventValueRecord {
30    pub header: RecordHeader,
31    pub kind: u8,
32    pub field_id: little_endian::U64,
33    pub thread_id: little_endian::U64,
34}
35
36impl EventValueRecord {
37    pub fn new(field_id: u64, kind: u8, value_len: usize, thread_id: u64) -> Self {
38        EventValueRecord {
39            field_id: field_id.into(),
40            header: RecordHeader::new(
41                record_kind::EVENT_VALUE,
42                (std::mem::size_of::<Self>() + value_len) as u16,
43            ),
44            kind,
45            thread_id: thread_id.into(),
46        }
47    }
48}