zhc_utils 0.8.0

Shared utilities for the ZHC compiler
Documentation
use super::*;
use serde::Serialize;
use serde_json::Value;

#[derive(Debug, Serialize, Clone)]
#[serde(untagged)]
pub enum Event {
    DurationBegin(DurationBeginEvent),
    DurationEnd(DurationEndEvent),
    Complete(CompleteEvent),
    Instant(InstantEvent),
    Metadata(MetadataEvent),
    Counter(CounterEvent),
}

#[derive(Serialize, Debug, Clone)]
pub struct DurationBeginEvent {
    pub name: String,
    #[serde(rename = "cat")]
    pub categories: Categories,
    pub ph: PhB,
    #[serde(rename = "ts")]
    pub timestamp: Microseconds,
    pub pid: Pid,
    pub tid: Tid,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "tts")]
    pub thread_timestamp: Option<Microseconds>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub args: Option<Value>,
    #[serde(flatten)]
    pub stack_trace: MaybeStackTrace,
}

#[derive(Serialize, Debug, Clone)]
pub struct DurationEndEvent {
    pub name: String,
    #[serde(rename = "cat")]
    pub categories: Categories,
    pub ph: PhE,
    #[serde(rename = "ts")]
    pub timestamp: Microseconds,
    pub pid: Pid,
    pub tid: Tid,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "tts")]
    pub thread_timestamp: Option<Microseconds>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub args: Option<Value>,
    #[serde(flatten)]
    pub stack_trace: MaybeStackTrace,
}

#[derive(Serialize, Debug, Clone, Default)]
pub struct CompleteEvent {
    pub name: String,
    #[serde(rename = "cat")]
    pub categories: Categories,
    pub ph: PhX,
    #[serde(rename = "ts")]
    pub timestamp: Microseconds,
    #[serde(rename = "dur")]
    pub duration: Microseconds,
    pub pid: Pid,
    pub tid: Tid,
    #[serde(skip_serializing_if = "Option::is_none")]
    #[serde(rename = "tdur")]
    pub thread_duration: Option<Microseconds>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub args: Option<Value>,
}

#[derive(Serialize, Debug, Clone, Default)]
pub struct InstantEvent {
    pub name: String,
    #[serde(rename = "cat")]
    pub categories: Categories,
    pub ph: Phi,
    #[serde(rename = "ts")]
    pub timestamp: Microseconds,
    pub pid: Pid,
    pub tid: Tid,
    #[serde(rename = "s")]
    pub scope: Scope,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub args: Option<Value>,
}

#[derive(Serialize, Debug, Clone, Default)]
pub enum Metadata {
    #[serde(rename = "process_name")]
    #[default]
    ProcessName,
    #[serde(rename = "process_labels")]
    ProcessLabels,
    #[serde(rename = "process_sort_index")]
    ProcessSortIndex,
    #[serde(rename = "thread_name")]
    ThreadName,
    #[serde(rename = "thread_sort_index")]
    ThreadSortIndex,
}

#[derive(Serialize, Debug, Clone, Default)]
#[serde(untagged)]
pub enum MetadataArgs {
    ProcessName {
        name: String,
    },
    ProcessLabels {
        labels: String,
    },
    ProcessSortIndex {
        sort_index: usize,
    },
    ThreadName {
        name: String,
    },
    ThreadSortIndex {
        sort_index: usize,
    },
    #[default]
    None,
}

#[derive(Serialize, Debug, Clone, Default)]
pub struct MetadataEvent {
    pub name: Metadata,
    pub ph: PhM,
    pub pid: Pid,
    pub tid: Tid,
    pub args: MetadataArgs,
}

#[derive(Serialize, Debug, Clone, Default)]
pub struct CounterEvent {
    pub name: String,
    #[serde(rename = "cat")]
    pub categories: Categories,
    pub ph: PhC,
    #[serde(rename = "ts")]
    pub timestamp: Microseconds,
    pub pid: Pid,
    pub tid: Tid,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub args: Option<Value>,
}