A better Rust ATProto crate
1use jacquard_lexicon::codegen::{CodeGenerator, CodegenMode};
2use jacquard_lexicon::corpus::LexiconCorpus;
3use std::path::PathBuf;
4
5fn main() {
6 let manifest_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
7 let fixtures_dir = manifest_dir.join("fixtures");
8
9 let corpus = LexiconCorpus::load_from_dir(&fixtures_dir).expect("load test lexicons");
10
11 // Generate Pretty mode output into src/generated/pretty/.
12 // We generate into src/ (not OUT_DIR) because `mod` declarations
13 // resolve relative to the source file, and include!() cannot handle
14 // multi-file module trees.
15 let pretty_dir = manifest_dir.join("src/generated/pretty");
16 if pretty_dir.exists() {
17 std::fs::remove_dir_all(&pretty_dir).expect("clean pretty output");
18 }
19 std::fs::create_dir_all(&pretty_dir).unwrap();
20 let codegen = CodeGenerator::with_mode(&corpus, "crate::pretty", CodegenMode::Pretty);
21 codegen
22 .write_to_disk(&pretty_dir)
23 .expect("pretty mode codegen");
24
25 // Generate Macro mode output into src/generated/macro_mode/.
26 let macro_dir = manifest_dir.join("src/generated/macro_mode");
27 if macro_dir.exists() {
28 std::fs::remove_dir_all(¯o_dir).expect("clean macro output");
29 }
30 std::fs::create_dir_all(¯o_dir).unwrap();
31 let codegen = CodeGenerator::with_mode(&corpus, "crate::macro_mode", CodegenMode::Macro);
32 codegen
33 .write_to_disk(¯o_dir)
34 .expect("macro mode codegen");
35
36 println!("cargo::rerun-if-changed=fixtures");
37}