use anyhow::Result;
use clap::Parser;
#[derive(Parser, Debug)]
pub struct Opts {
pub input: String,
#[arg(short, long)]
pub model: Option<String>,
}
pub async fn run(opts: &Opts) -> Result<()> {
let content = std::fs::read_to_string(&opts.input)?;
let models = modality_lang::parse_all_models_content_lalrpop(&content)
.map_err(|e| anyhow::anyhow!("Failed to parse models: {}", e))?;
let model = if let Some(model_name) = &opts.model {
models.into_iter()
.find(|m| m.name == *model_name)
.ok_or_else(|| anyhow::anyhow!("Model '{}' not found", model_name))?
} else {
models.into_iter()
.next()
.ok_or_else(|| anyhow::anyhow!("No models found in file"))?
};
let mermaid = modality_lang::generate_mermaid_diagram(&model);
println!("{}", mermaid);
Ok(())
}