Skip to main content

codegen_workflow/
codegen_workflow.rs

1// Does not require a live GemStone/S stone.
2//
3// Expected output includes:
4//
5// before generate: exists=false up_to_date=false
6// after generate: exists=true up_to_date=true
7// diff after generate: clean
8
9use gemstone_rs::codegen::{self, Config};
10use std::fs;
11
12fn main() -> codegen::Result<()> {
13    let root = std::env::temp_dir().join(format!(
14        "gemstone-rs-codegen-workflow-{}",
15        std::process::id()
16    ));
17    if root.exists() {
18        fs::remove_dir_all(&root)?;
19    }
20    fs::create_dir_all(&root)?;
21
22    let config_path = root.join("gemstone-rs.codegen");
23    fs::write(
24        &config_path,
25        "# gemstone-rs codegen workflow example\n\
26         output = generated/gemstone_wrappers.rs\n\
27         class = Object\n\
28         method = Object>>printString | return=String | doc=Return the receiver printString.\n\
29         method = Object>>class\n",
30    )?;
31
32    let config = Config::from_file(&config_path)?;
33    println!("config: {}", config_path.display());
34    println!("output: {}", config.output.display());
35
36    let preview = codegen::generate(&config);
37    println!("preview bytes: {}", preview.source.len());
38    println!(
39        "preview first line: {}",
40        preview.source.lines().next().unwrap_or_default()
41    );
42
43    let before = codegen::diff(&config)?;
44    println!(
45        "before generate: exists={} up_to_date={} diff_bytes={}",
46        before.exists,
47        before.up_to_date,
48        before.diff.len()
49    );
50    assert!(!before.up_to_date);
51
52    let generated = codegen::generate_to_file(&config)?;
53    println!("generated: {}", generated.output.display());
54
55    let check = codegen::check(&config)?;
56    println!(
57        "after generate: exists={} up_to_date={}",
58        check.exists, check.up_to_date
59    );
60    assert!(check.exists);
61    assert!(check.up_to_date);
62
63    let after = codegen::diff(&config)?;
64    assert!(after.diff.is_empty());
65    println!("diff after generate: clean");
66
67    Ok(())
68}