diff --git a/hugr-cli/src/hugr_io.rs b/hugr-cli/src/hugr_io.rs index 14e8588c2..5bdf8a13c 100644 --- a/hugr-cli/src/hugr_io.rs +++ b/hugr-cli/src/hugr_io.rs @@ -1,7 +1,7 @@ //! Input/output arguments for the HUGR CLI. use clio::Input; -use hugr::envelope::read_envelope; +use hugr::envelope::{read_envelope, EnvelopeError}; use hugr::extension::ExtensionRegistry; use hugr::package::Package; use hugr::{Extension, Hugr}; @@ -48,8 +48,11 @@ impl HugrInputArgs { pub fn get_package(&mut self) -> Result { let extensions = self.load_extensions()?; let buffer = BufReader::new(&mut self.input); - let (_, pkg) = read_envelope(buffer, &extensions)?; - Ok(pkg) + match read_envelope(buffer, &extensions) { + Ok((_, pkg)) => Ok(pkg), + Err(EnvelopeError::MagicNumber { .. }) => Err(CliError::NotAnEnvelope), + Err(e) => Err(CliError::Envelope(e)), + } } /// Read a hugr JSON file from the input. diff --git a/hugr-cli/src/lib.rs b/hugr-cli/src/lib.rs index 2162a86e7..5387a0274 100644 --- a/hugr-cli/src/lib.rs +++ b/hugr-cli/src/lib.rs @@ -53,6 +53,11 @@ pub enum CliError { #[display("Error decoding HUGR envelope: {_0}")] /// Errors produced by the `validate` subcommand. Envelope(EnvelopeError), + /// Pretty error when the user passes a non-envelope file. + #[display( + "Input file is not a HUGR envelope. Invalid magic number.\n\nUse `--hugr-json` to read a raw HUGR JSON file instead." + )] + NotAnEnvelope, } /// Other arguments affecting the HUGR CLI runtime.