use anyhow::{Context, Result};
use console::{Term, style};
use std::time::Instant;
pub fn run(gold_dir: &str, output_dir: &str) -> Result<()> {
let term = Term::stdout();
let start = Instant::now();
term.write_line("")?;
term.write_line(&format!(
"{} {}",
style("Generating code from:").bold().cyan(),
style(gold_dir).white()
))?;
term.write_line(&format!(
"{} {}",
style("Output directory:").dim(),
style(output_dir).white()
))?;
term.write_line("")?;
let report = audb_build::Builder::new()
.gold_dir(gold_dir)
.output_dir(output_dir)
.emit_cargo_directives(false) .generate()
.context("Failed to generate code")?;
let duration = start.elapsed();
term.write_line(&format!(
"{} Code generation complete",
style("✓").green().bold()
))?;
term.write_line("")?;
term.write_line(&format!(
" {} {} files processed",
style("Files:").dim(),
style(report.files_processed).green()
))?;
term.write_line(&format!(
" {} {} schemas generated",
style("Schemas:").dim(),
style(report.schemas_generated).green()
))?;
term.write_line(&format!(
" {} {} queries generated",
style("Queries:").dim(),
style(report.queries_generated).green()
))?;
term.write_line(&format!(
" {} {} endpoints generated",
style("Endpoints:").dim(),
style(report.endpoints_generated).green()
))?;
term.write_line(&format!(
" {} {:.1}ms",
style("Time:").dim(),
duration.as_secs_f64() * 1000.0
))?;
term.write_line("")?;
Ok(())
}