Skip to main content

aprender_contracts_cli/commands/
scaffold.rs

1use std::path::Path;
2
3use provable_contracts::scaffold::{
4    generate_contract_tests, generate_standalone_trait, generate_trait,
5};
6use provable_contracts::schema::parse_contract;
7
8pub fn run(
9    path: &Path,
10    standalone_trait: bool,
11    output: Option<&Path>,
12) -> Result<(), Box<dyn std::error::Error>> {
13    let contract = parse_contract(path)?;
14
15    if standalone_trait {
16        let stem = path
17            .file_stem()
18            .and_then(|s| s.to_str())
19            .unwrap_or("unknown");
20        let code = generate_standalone_trait(&contract, stem);
21
22        if let Some(out_path) = output {
23            std::fs::write(out_path, &code)?;
24            println!("Generated trait: {}", out_path.display());
25        } else {
26            print!("{code}");
27        }
28        return Ok(());
29    }
30
31    println!("// === Trait Definition ===\n");
32    print!("{}", generate_trait(&contract));
33    println!("\n// === Contract Tests ===\n");
34    print!("{}", generate_contract_tests(&contract));
35
36    Ok(())
37}