hugr_cli/
mermaid.rs

1//! Render mermaid diagrams.
2use std::io::Write;
3
4use clap::Parser;
5use clio::Output;
6use hugr::HugrView;
7
8/// Dump the standard extensions.
9#[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    /// Common arguments
16    #[command(flatten)]
17    pub hugr_args: crate::HugrArgs,
18    /// Validate package.
19    #[arg(
20        long,
21        help = "Validate before rendering, includes extension inference."
22    )]
23    pub validate: bool,
24    /// Output file '-' for stdout
25    #[clap(long, short, value_parser, default_value = "-")]
26    output: Output,
27}
28
29impl MermaidArgs {
30    /// Write the mermaid diagram to the output.
31    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}