dial9_trace_format/
lib.rs1pub mod codec;
2pub mod decoder;
3pub mod encoder;
4pub mod leb128;
5pub mod schema;
6pub mod types;
7
8pub use dial9_trace_format_derive::TraceEvent;
9pub use types::EventEncoder;
10pub use types::InternedString;
11pub use types::StackFrames;
12pub use types::TraceField;
13
14use schema::{FieldDef, SchemaEntry};
15use types::FieldValueRef;
16
17pub trait TraceEvent {
19 type Ref<'a>;
21
22 fn event_name() -> &'static str;
24 fn field_defs() -> Vec<FieldDef>;
28 fn has_timestamp() -> bool {
30 true
31 }
32 fn timestamp(&self) -> u64;
34 fn encode_fields<W: std::io::Write>(
36 &self,
37 enc: &mut types::EventEncoder<'_, W>,
38 ) -> std::io::Result<()>;
39 fn decode<'a>(timestamp_ns: Option<u64>, fields: &[FieldValueRef<'a>])
42 -> Option<Self::Ref<'a>>;
43
44 fn schema_entry() -> SchemaEntry {
46 SchemaEntry {
47 name: Self::event_name().to_string(),
48 has_timestamp: Self::has_timestamp(),
49 fields: Self::field_defs(),
50 }
51 }
52}