use std::io::Write;
use clap::Parser;
use clio::Output;
use hugr::HugrView;
#[derive(Parser, Debug)]
#[clap(version = "1.0", long_about = None)]
#[clap(about = "Render mermaid diagrams..")]
#[group(id = "hugr")]
#[non_exhaustive]
pub struct MermaidArgs {
#[command(flatten)]
pub hugr_args: crate::HugrArgs,
#[arg(
long,
help = "Validate before rendering, includes extension inference."
)]
pub validate: bool,
#[clap(long, short, value_parser, default_value = "-")]
output: Output,
}
impl MermaidArgs {
pub fn run_print(&mut self) -> Result<(), crate::CliError> {
let hugrs = if self.validate {
self.hugr_args.validate()?
} else {
let extensions = self.hugr_args.extensions()?;
self.hugr_args
.get_package_or_hugr(&extensions)?
.into_hugrs()
};
for hugr in hugrs {
write!(self.output, "{}", hugr.mermaid_string())?;
}
Ok(())
}
}