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