1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
5pub enum Direction {
6 #[serde(rename = "tx")]
7 Send,
8 #[serde(rename = "rx")]
9 Receive,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
14pub enum TraceEventType {
15 ControlMessageSent,
16 ControlMessageReceived,
17 DataStreamOpened,
18 DataStreamClosed,
19 ObjectSent,
20 ObjectReceived,
21 SessionEstablished,
22 SessionClosed,
23 Error,
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
28pub struct TraceEvent {
29 pub timestamp_us: u64,
30 pub event_type: TraceEventType,
31 pub direction: Direction,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub message_type: Option<u64>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub request_id: Option<u64>,
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub track_alias: Option<u64>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub group: Option<u64>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub object: Option<u64>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub payload_size: Option<u64>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub error_code: Option<u64>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub reason: Option<String>,
48}