Skip to main content

aprender_contracts_cli/commands/
explain.rs

1use std::path::Path;
2
3use provable_contracts::binding::parse_binding;
4use provable_contracts::explain::{
5    explain_contract, explain_contract_json, explain_contract_markdown,
6};
7use provable_contracts::schema::parse_contract;
8
9pub fn run(
10    path: &Path,
11    binding_path: Option<&Path>,
12    format: &str,
13) -> Result<(), Box<dyn std::error::Error>> {
14    let contract = parse_contract(path)?;
15    let stem = path
16        .file_stem()
17        .and_then(|s| s.to_str())
18        .unwrap_or("unknown");
19
20    let binding = match binding_path {
21        Some(bp) => Some(parse_binding(bp)?),
22        None => None,
23    };
24
25    let output = match format {
26        "markdown" | "md" => explain_contract_markdown(&contract, stem, binding.as_ref()),
27        "json" => explain_contract_json(&contract, stem, binding.as_ref()),
28        _ => explain_contract(&contract, stem, binding.as_ref()),
29    };
30    print!("{output}");
31
32    Ok(())
33}