use std::path::PathBuf;
use clap::Parser;
use consortium_cli::grammar;
const EMBEDDED_BASELINE: &str = include_str!("../grammar/baseline.json");
#[derive(Parser)]
#[command(
name = "consortium-grammar",
about = "CLI grammar dump and strict baseline check"
)]
enum Cli {
Dump,
Check {
#[arg(long)]
baseline: Option<PathBuf>,
},
}
fn main() -> anyhow::Result<()> {
match Cli::parse() {
Cli::Dump => {
println!("{}", serde_json::to_string_pretty(&grammar::dump())?);
Ok(())
}
Cli::Check { baseline } => {
let report = match baseline {
Some(path) => grammar::check(&path)?,
None => {
let base: Vec<String> = serde_json::from_str(EMBEDDED_BASELINE)?;
let live = grammar::violations();
let keys: Vec<String> = live.iter().map(grammar::key_of).collect();
let count = grammar::check_keys(&keys, &base)?;
grammar::CheckReport {
ok: true,
baseline: base.len(),
violations: count,
}
}
};
println!("{}", serde_json::to_string(&report)?);
Ok(())
}
}
}