Skip to content

Commit d429940

Browse files
committed
include full error in json output
1 parent 735b92a commit d429940

File tree

3 files changed

+47
-13
lines changed

3 files changed

+47
-13
lines changed

hugr-cli/src/describe.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ impl DescribeArgs {
8585
self.module_args.filter_module(module);
8686
}
8787

88+
let res = res.map_err(anyhow::Error::from);
8889
if self.json {
8990
if !self.packaged_extensions {
9091
desc.packaged_extensions.clear();
@@ -95,8 +96,7 @@ impl DescribeArgs {
9596
}
9697

9798
// bubble up any errors
98-
let _ = res?;
99-
Ok(())
99+
res.map(|_| ())
100100
}
101101

102102
fn print_description(&mut self, desc: PackageDesc) -> Result<()> {
@@ -135,12 +135,8 @@ impl DescribeArgs {
135135
Ok(())
136136
}
137137

138-
fn output_json<E: std::error::Error>(
139-
&mut self,
140-
package_desc: PackageDesc,
141-
res: &Result<Package, E>,
142-
) -> Result<()> {
143-
let err_str = res.as_ref().err().map(|e| format!("{e}"));
138+
fn output_json(&mut self, package_desc: PackageDesc, res: &Result<Package>) -> Result<()> {
139+
let err_str = res.as_ref().err().map(|e| format!("{e:?}"));
144140
let json_desc = JsonDescription {
145141
package_desc,
146142
error: err_str,

hugr-cli/tests/describe.rs

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
//! calling the CLI binary, which Miri doesn't support.
55
#![cfg(all(test, not(miri)))]
66

7-
use std::sync::Arc;
8-
97
use assert_cmd::Command;
108
use assert_fs::NamedTempFile;
119
use assert_fs::assert::PathAssert;
@@ -14,7 +12,9 @@ use hugr::Extension;
1412
use hugr::builder::ModuleBuilder;
1513
use hugr::builder::{Dataflow, DataflowSubContainer, HugrBuilder};
1614
use hugr::core::Visibility;
17-
use hugr::envelope::{EnvelopeConfig, GENERATOR_KEY, USED_EXTENSIONS_KEY};
15+
use hugr::envelope::{
16+
EnvelopeConfig, EnvelopeFormat, EnvelopeHeader, GENERATOR_KEY, USED_EXTENSIONS_KEY,
17+
};
1818
use hugr::extension::prelude::bool_t;
1919
use hugr::extension::{ExtensionId, ExtensionRegistry, Version};
2020
use hugr::hugr::HugrView;
@@ -26,6 +26,8 @@ use predicates::{prelude::*, str::contains};
2626
use rstest::{fixture, rstest};
2727
use serde_json::Value;
2828
use serde_json::json;
29+
use std::io::Write;
30+
use std::sync::Arc;
2931
#[fixture]
3032
fn cmd() -> Command {
3133
Command::cargo_bin("hugr").unwrap()
@@ -53,6 +55,20 @@ fn empty_package_file(empty_package: Package) -> NamedTempFile {
5355
file
5456
}
5557

58+
#[fixture]
59+
fn invalid_package() -> Vec<u8> {
60+
let header = EnvelopeHeader {
61+
format: EnvelopeFormat::Model,
62+
..Default::default()
63+
};
64+
let mut buffer = Vec::new();
65+
header.write(&mut buffer).unwrap();
66+
buffer
67+
.write_all(b"this is not valid hugr package data")
68+
.unwrap();
69+
buffer
70+
}
71+
5672
#[fixture]
5773
fn package_with_exts() -> Vec<u8> {
5874
let test_ext = Extension::new_arc(
@@ -235,3 +251,26 @@ fn test_generator_claimed_extensions(package_with_exts: Vec<u8>, mut describe_cm
235251
.stdout(contains("Generator claimed extensions"))
236252
.stdout(contains("used_ext"));
237253
}
254+
255+
#[rstest]
256+
fn test_describe_invalid_package(invalid_package: Vec<u8>, mut describe_cmd: Command) {
257+
describe_cmd.write_stdin(invalid_package);
258+
describe_cmd
259+
.assert()
260+
.failure()
261+
.stdout(contains("Model"))
262+
.stderr(contains("Error reading a HUGR model payload"));
263+
}
264+
265+
#[rstest]
266+
fn test_describe_invalid_package_json(invalid_package: Vec<u8>, mut describe_cmd: Command) {
267+
describe_cmd.write_stdin(invalid_package);
268+
269+
describe_cmd.arg("--json");
270+
describe_cmd
271+
.assert()
272+
.failure()
273+
.stdout(contains("Model"))
274+
.stdout(contains("\"error\": \"Error reading a HUGR model payload")) // error included in JSON
275+
.stderr(contains("Error reading a HUGR model payload"));
276+
}

hugr-core/src/envelope.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub use reader::PayloadError;
4343

4444
pub mod serde_with;
4545

46-
pub use header::{EnvelopeConfig, EnvelopeFormat, MAGIC_NUMBERS, ZstdConfig};
46+
pub use header::{EnvelopeConfig, EnvelopeFormat, EnvelopeHeader, MAGIC_NUMBERS, ZstdConfig};
4747
pub use package_json::PackageEncodingError;
4848

4949
use crate::envelope::description::PackageDesc;
@@ -54,7 +54,6 @@ use crate::{
5454
extension::{ExtensionRegistry, Version},
5555
package::Package,
5656
};
57-
use header::EnvelopeHeader;
5857
use std::io::BufRead;
5958
use std::io::Write;
6059
use thiserror::Error;

0 commit comments

Comments
 (0)