1use clap::Parser;
4use clap_verbosity_flag::log::Level;
5use hugr::package::PackageValidationError;
6use hugr::{Hugr, HugrView};
7
8use crate::hugr_io::HugrInputArgs;
9use crate::{CliError, OtherArgs};
10
11#[derive(Parser, Debug)]
13#[clap(version = "1.0", long_about = None)]
14#[clap(about = "Validate a HUGR.")]
15#[group(id = "hugr")]
16#[non_exhaustive]
17pub struct ValArgs {
18 #[command(flatten)]
20 pub input_args: HugrInputArgs,
21
22 #[command(flatten)]
24 pub other_args: OtherArgs,
25}
26
27pub const VALID_PRINT: &str = "HUGR valid!";
29
30impl ValArgs {
31 pub fn run(&mut self) -> Result<Vec<Hugr>, CliError> {
33 let result = if self.input_args.hugr_json {
34 let hugr = self.input_args.get_hugr()?;
35 hugr.validate()
36 .map_err(PackageValidationError::Validation)?;
37 vec![hugr]
38 } else {
39 let package = self.input_args.get_package()?;
40 package.validate()?;
41 package.modules
42 };
43
44 if self.verbosity(Level::Info) {
45 eprintln!("{VALID_PRINT}");
46 }
47
48 Ok(result)
49 }
50
51 #[must_use]
53 pub fn verbosity(&self, level: Level) -> bool {
54 self.other_args.verbosity(level)
55 }
56}