From d19cb9e15477baeea2d642d36a13ac143de1f35a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Agust=C3=ADn=20Borgna?= Date: Thu, 7 Aug 2025 11:11:38 +0200 Subject: [PATCH] feat(hugr-cli): CliError helper --- hugr-cli/src/lib.rs | 14 ++++++++++++++ hugr-cli/src/mermaid.rs | 5 ++++- hugr-cli/src/validate.rs | 15 ++------------- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/hugr-cli/src/lib.rs b/hugr-cli/src/lib.rs index d4c269d811..9e5e74ece8 100644 --- a/hugr-cli/src/lib.rs +++ b/hugr-cli/src/lib.rs @@ -136,3 +136,17 @@ pub enum CliError { generator: Box, }, } + +impl CliError { + /// Returns a validation error, with an optional generator. + pub fn validation(generator: Option, val_err: PackageValidationError) -> Self { + if let Some(g) = generator { + Self::ValidateKnownGenerator { + inner: val_err, + generator: Box::new(g.to_string()), + } + } else { + Self::Validate(val_err) + } + } +} diff --git a/hugr-cli/src/mermaid.rs b/hugr-cli/src/mermaid.rs index 09cb7b7041..8a7f5121c1 100644 --- a/hugr-cli/src/mermaid.rs +++ b/hugr-cli/src/mermaid.rs @@ -44,9 +44,12 @@ impl MermaidArgs { /// Write the mermaid diagram for a HUGR envelope. pub fn run_print_envelope(&mut self) -> Result<()> { let package = self.input_args.get_package()?; + let generator = hugr::envelope::get_generator(&package.modules); if self.validate { - package.validate().map_err(CliError::Validate)?; + package + .validate() + .map_err(|val_err| CliError::validation(generator, val_err))?; } for hugr in package.modules { diff --git a/hugr-cli/src/validate.rs b/hugr-cli/src/validate.rs index 08253809d7..e82a71a03b 100644 --- a/hugr-cli/src/validate.rs +++ b/hugr-cli/src/validate.rs @@ -34,13 +34,13 @@ impl ValArgs { hugr.validate() .map_err(PackageValidationError::Validation) - .map_err(|val_err| wrap_generator(generator, val_err))?; + .map_err(|val_err| CliError::validation(generator, val_err))?; } else { let package = self.input_args.get_package()?; let generator = hugr::envelope::get_generator(&package.modules); package .validate() - .map_err(|val_err| wrap_generator(generator, val_err))?; + .map_err(|val_err| CliError::validation(generator, val_err))?; }; info!("{VALID_PRINT}"); @@ -48,14 +48,3 @@ impl ValArgs { Ok(()) } } - -fn wrap_generator(generator: Option, val_err: PackageValidationError) -> CliError { - if let Some(g) = generator { - CliError::ValidateKnownGenerator { - inner: val_err, - generator: Box::new(g.to_string()), - } - } else { - CliError::Validate(val_err) - } -}