use serde::Serialize;
use serde_json::{Map, Value};
#[derive(Debug, Clone, Serialize)]
pub struct RunSummary {
pub run_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outcome: Option<String>,
pub input_tokens: u64,
pub output_tokens: u64,
pub cost_usd: f64,
pub labels: Map<String, Value>,
}
#[derive(Debug, Clone, Serialize)]
pub struct RunsResponse {
pub items: Vec<RunSummary>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SpanTree {
pub run_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub agent_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outcome: Option<String>,
pub labels: Map<String, Value>,
pub roots: Vec<SpanNode>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub orphans: Vec<SpanNode>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SpanNode {
pub span_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_span_id: Option<String>,
pub name: String,
pub level: String,
pub target: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub started_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub closed_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration_ms: Option<f64>,
pub fields: Map<String, Value>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub events: Vec<SpanEvent>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub children: Vec<SpanNode>,
}
#[derive(Debug, Clone, Serialize)]
pub struct SpanEvent {
pub ts: String,
pub level: String,
pub target: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
pub fields: Map<String, Value>,
}