1use clap::Parser;
4use clap_verbosity_flag::log::Level;
5use hugr::package::PackageValidationError;
6use hugr::Hugr;
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 = match self.input_args.hugr_json {
34 true => {
35 let hugr = self.input_args.get_hugr()?;
36 hugr.validate()
37 .map_err(PackageValidationError::Validation)?;
38 vec![hugr]
39 }
40 false => {
41 let package = self.input_args.get_package()?;
42 package.validate()?;
43 package.modules
44 }
45 };
46
47 if self.verbosity(Level::Info) {
48 eprintln!("{}", VALID_PRINT);
49 }
50
51 Ok(result)
52 }
53
54 pub fn verbosity(&self, level: Level) -> bool {
56 self.other_args.verbosity(level)
57 }
58}