use anyhow::Result;
use clap::Parser;
use std::io::Read;
#[cfg(feature = "tracing")]
use tracing::info;
use crate::CliError;
use crate::hugr_io::HugrInputArgs;
#[derive(Parser, Debug)]
#[clap(version = "1.0", long_about = None)]
#[clap(about = "Validate a HUGR.")]
#[group(id = "hugr")]
#[non_exhaustive]
pub struct ValArgs {
#[command(flatten)]
pub input_args: HugrInputArgs,
}
pub const VALID_PRINT: &str = "HUGR valid!";
impl ValArgs {
pub fn run_with_input<R: Read>(&mut self, input_override: Option<R>) -> Result<()> {
let (desc, package) = self
.input_args
.get_described_package_with_reader(input_override)?;
let generator = desc.generator();
package
.validate()
.map_err(|val_err| CliError::validation(generator, val_err))?;
#[cfg(feature = "tracing")]
info!("{VALID_PRINT}");
#[cfg(not(feature = "tracing"))]
eprintln!("{VALID_PRINT}");
Ok(())
}
pub fn run(&mut self) -> Result<()> {
self.run_with_input(None::<&[u8]>)
}
}