1use clap::Parser;
2use jacquard_lexicon::codegen::CodeGenerator;
3use jacquard_lexicon::corpus::LexiconCorpus;
4use std::path::PathBuf;
5
6#[derive(Parser, Debug)]
7#[command(author, version, about = "Generate Rust code from Lexicon schemas")]
8struct Args {
9 /// Directory containing Lexicon JSON files
10 #[arg(short = 'i', long)]
11 input: PathBuf,
12
13 /// Output directory for generated Rust code
14 #[arg(short = 'o', long)]
15 output: PathBuf,
16
17 /// Root module name (default: "crate")
18 #[arg(short = 'r', long, default_value = "crate")]
19 root_module: String,
20}
21
22fn main() -> miette::Result<()> {
23 let args = Args::parse();
24
25 println!("Loading lexicons from {:?}...", args.input);
26 let corpus = LexiconCorpus::load_from_dir(&args.input)?;
27
28 println!("Loaded {} lexicon documents", corpus.iter().count());
29
30 println!("Generating code...");
31 let codegen = CodeGenerator::new(&corpus, args.root_module);
32 codegen.write_to_disk(&args.output)?;
33
34 println!("✨ Generated code to {:?}", args.output);
35
36 Ok(())
37}