fn output_json(report: &QualityReport) -> Result<()> {
let json = serde_json::to_string_pretty(report)?;
println!("{}", json);
Ok(())
}
fn output_markdown(report: &QualityReport) -> Result<()> {
let markdown = format_report(report);
println!("{}", markdown);
Ok(())
}
fn output_summary(report: &QualityReport) -> Result<()> {
println!(
"\n{} Quality Gate Results",
if report.passed { "✅" } else { "❌" }
);
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
for gate in &report.gates {
let icon = if gate.passed { "✓" } else { "✗" };
let color = if gate.passed { "\x1b[32m" } else { "\x1b[31m" };
let reset = "\x1b[0m";
println!(
"{}{} {}{} ({:.2}s)",
color,
icon,
gate.name,
reset,
gate.duration.as_secs_f64()
);
if !gate.passed && !gate.message.is_empty() {
for line in gate.message.lines().take(5) {
println!(" {}", line);
}
}
}
println!("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("Total time: {:.2}s", report.total_duration.as_secs_f64());
Ok(())
}