1use 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>;