Skip to main content

zelos_trace_types/
ipc.rs

1// Trace-related messages that are sent between processes (or inside the same process).
2
3use std::collections::HashMap;
4
5use derive_more::From;
6use uuid::Uuid;
7
8use crate::{DataType, Value};
9
10#[derive(Debug, Clone)]
11pub struct TraceSegmentStart {
12    pub time_ns: i64,
13    pub source_name: String,
14}
15
16#[derive(Debug, Clone)]
17pub struct TraceSegmentEnd {
18    pub time_ns: i64,
19}
20
21#[derive(Debug, Clone, PartialEq, Eq, Hash)]
22pub struct TraceEventFieldMetadata {
23    pub name: String,
24    pub data_type: DataType,
25    pub unit: Option<String>,
26}
27
28#[derive(Debug, Clone)]
29pub struct TraceEventSchema {
30    pub name: String,
31    pub fields: Vec<TraceEventFieldMetadata>,
32}
33
34#[derive(Debug, Clone)]
35pub struct TraceEventFieldNamedValues {
36    pub event_name: String,
37    pub field_name: String,
38    pub values: HashMap<Value, String>,
39}
40
41#[derive(Debug, Clone)]
42pub struct TraceEvent {
43    pub time_ns: i64,
44    pub name: String,
45    pub fields: HashMap<String, Value>,
46}
47
48#[derive(Debug, Clone, From)]
49pub enum IpcMessage {
50    TraceSegmentStart(TraceSegmentStart),
51    TraceSegmentEnd(TraceSegmentEnd),
52    TraceEventSchema(TraceEventSchema),
53    TraceEventFieldNamedValues(TraceEventFieldNamedValues),
54    TraceEvent(TraceEvent),
55}
56
57#[derive(Debug, Clone)]
58pub struct IpcMessageWithId {
59    pub segment_id: Uuid,
60    pub source_name: String,
61    pub msg: IpcMessage,
62}
63
64pub type Sender = flume::Sender<IpcMessageWithId>;
65pub type Receiver = flume::Receiver<IpcMessageWithId>;