use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
#[serde(tag = "phase")]
pub enum ProgressPhase {
#[serde(rename = "warmup")]
Warmup {
elapsed_ms: u64,
target_ms: u64,
},
#[serde(rename = "samples")]
Samples {
current: u32,
total: u32,
},
#[serde(rename = "complete")]
Complete,
}
#[derive(Debug, Clone, Serialize)]
pub struct ProgressMessage<'a> {
pub bench: &'a str,
#[serde(flatten)]
pub phase: ProgressPhase,
}
fn progress_enabled() -> bool {
std::env::var("SIMPLEBENCH_QUIET").is_err()
}
pub fn emit_progress(msg: &ProgressMessage) {
if !progress_enabled() {
return;
}
if let Ok(json) = serde_json::to_string(&serde_json::json!({"progress": msg})) {
eprintln!("{}", json);
}
}