use serde::{Deserialize, Serialize};
pub type TraceSequence = u64;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkflowTrace {
pub metadata: WorkflowTraceMetadata,
pub events: Vec<TraceEvent>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct WorkflowTraceMetadata {
pub trace_id: String,
pub workflow_name: String,
pub workflow_version: String,
pub started_at_unix_ms: u64,
pub finished_at_unix_ms: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TraceEvent {
pub seq: TraceSequence,
pub timestamp_unix_ms: u64,
#[serde(flatten)]
pub kind: TraceEventKind,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(tag = "event", rename_all = "snake_case")]
pub enum TraceEventKind {
NodeEnter { node_id: String },
NodeExit { node_id: String },
NodeError { node_id: String, message: String },
Terminal { status: TraceTerminalStatus },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum TraceTerminalStatus {
Completed,
Failed,
}