A better Rust ATProto crate
at oauth 1.0 kB view raw
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}