1use anyhow::Result;
4use clap::Parser;
5use hugr::HugrView;
6use hugr::package::PackageValidationError;
7use tracing::info;
8
9use crate::CliError;
10use crate::hugr_io::HugrInputArgs;
11
12#[derive(Parser, Debug)]
14#[clap(version = "1.0", long_about = None)]
15#[clap(about = "Validate a HUGR.")]
16#[group(id = "hugr")]
17#[non_exhaustive]
18pub struct ValArgs {
19 #[command(flatten)]
21 pub input_args: HugrInputArgs,
22}
23
24pub const VALID_PRINT: &str = "HUGR valid!";
26
27impl ValArgs {
28 pub fn run(&mut self) -> Result<()> {
30 if self.input_args.hugr_json {
31 #[allow(deprecated)]
32 let hugr = self.input_args.get_hugr()?;
33 #[allow(deprecated)]
34 let generator = hugr::envelope::get_generator(&[&hugr]);
35
36 hugr.validate()
37 .map_err(PackageValidationError::Validation)
38 .map_err(|val_err| CliError::validation(generator, val_err))?;
39 } else {
40 let (desc, package) = self.input_args.get_described_package()?;
41 let generator = desc.generator();
42 package
43 .validate()
44 .map_err(|val_err| CliError::validation(generator, val_err))?;
45 };
46
47 info!("{VALID_PRINT}");
48
49 Ok(())
50 }
51}