aprender_contracts_cli/commands/
scaffold.rs1use 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}