use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum StepStatus {
Ok,
Error,
Skipped,
}
#[derive(Debug, Clone, Serialize)]
pub struct StepResult {
pub index: usize,
#[serde(skip_serializing_if = "Option::is_none")]
pub command: Option<Vec<String>>,
pub status: StepStatus,
#[serde(skip_serializing_if = "Option::is_none")]
pub output: Option<serde_json::Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
pub duration_ms: u64,
#[serde(skip_serializing_if = "Option::is_none")]
pub loop_index: Option<u64>,
}
#[derive(Debug, Serialize)]
pub struct RunReport {
pub results: Vec<StepResult>,
pub executed: usize,
pub skipped: usize,
pub failed: usize,
pub total_ms: u64,
}
#[derive(Debug, Serialize)]
pub struct DryRunReport {
pub dispatched: bool,
pub ok: bool,
pub steps: usize,
}