1use std::io::Write;
3
4use clap::Parser;
5use clio::Output;
6use hugr::HugrView;
7
8#[derive(Parser, Debug)]
10#[clap(version = "1.0", long_about = None)]
11#[clap(about = "Render mermaid diagrams..")]
12#[group(id = "hugr")]
13#[non_exhaustive]
14pub struct MermaidArgs {
15 #[command(flatten)]
17 pub hugr_args: crate::HugrArgs,
18 #[arg(
20 long,
21 help = "Validate before rendering, includes extension inference."
22 )]
23 pub validate: bool,
24 #[clap(long, short, value_parser, default_value = "-")]
26 output: Output,
27}
28
29impl MermaidArgs {
30 pub fn run_print(&mut self) -> Result<(), crate::CliError> {
32 let hugrs = if self.validate {
33 self.hugr_args.validate()?
34 } else {
35 let extensions = self.hugr_args.extensions()?;
36 self.hugr_args
37 .get_package_or_hugr(&extensions)?
38 .into_hugrs()
39 };
40
41 for hugr in hugrs {
42 write!(self.output, "{}", hugr.mermaid_string())?;
43 }
44 Ok(())
45 }
46}