Skip to content

Commit

Permalink
Fix regression related to broken pipe issues
Browse files Browse the repository at this point in the history
ref #61
  • Loading branch information
chevdor committed May 10, 2023
1 parent c8eb5e8 commit d788745
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 39 deletions.
5 changes: 0 additions & 5 deletions cli/tests/meta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@ mod cli_tests {
assert.success().code(0);
}

// todo: test/fix following
// c run -- meta --chain wnd -f json | head # OK
// c run -- meta --chain wnd -f scale | head # FAIL
// c run -- meta --chain wnd -f hex+scale | head # FIXED
// c run -- meta --chain wnd -f json+scale | head # FIXED
// #[test]
// fn it_shows_when_piped() {
// // let mut cmd = AssertCommand::cargo_bin(env!("CARGO_PKG_NAME")).unwrap();
Expand Down
64 changes: 30 additions & 34 deletions lib/src/metadata_wrapper.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
use std::io::Write;

use crate::{convert::convert, utils::print_big_output_safe, write_module, write_v14_meta};
use color_eyre::eyre::eyre;
use frame_metadata::{RuntimeMetadata, RuntimeMetadataPrefixed};
use log::debug;
use scale_info::scale::Encode;

use crate::{convert::convert, utils::print_big_output_safe, write_module, write_v14_meta};
use std::io::Write;

/// The output format for the metadata
#[derive(Debug, Clone, Copy)]
Expand Down Expand Up @@ -59,40 +57,38 @@ impl<'a> MetadataWrapper<'a> {
self.write_modules_list(out)?;
}
}
OutputFormat::Json => {
if filter.is_some() {
return Err(eyre!("Cannot filter metadata in json format"));
} else {
let serialized = serde_json::to_string_pretty(self.runtime_metadata())?;
let _ = print_big_output_safe(&serialized);
}

OutputFormat::Json if filter.is_none() => {
let serialized = serde_json::to_string_pretty(self.runtime_metadata())?;
let _ = print_big_output_safe(&serialized);
}
OutputFormat::Scale => {
if filter.is_some() {
return Err(eyre!("Cannot filter metadata in scale format"));
} else {
out.write_all(&self.runtime_metadata_prefixed().encode())?;
}

OutputFormat::Scale if filter.is_none() => {
match out.write_all(&self.runtime_metadata_prefixed().encode()) {
Ok(_) => {}
Err(_) => {} // Silence broken pipe errors
};
}
OutputFormat::HexScale => {
if filter.is_some() {
return Err(eyre!("Cannot filter metadata in hex+scale format"));
} else {
let encoded = self.runtime_metadata_prefixed().encode();
let hexscale = format!("0x{}", hex::encode(encoded));
let _ = print_big_output_safe(&hexscale);
}

OutputFormat::HexScale if filter.is_none() => {
let encoded = self.runtime_metadata_prefixed().encode();
let hexscale = format!("0x{}", hex::encode(encoded));
let _ = print_big_output_safe(&hexscale);
}
OutputFormat::JsonScale => {
if filter.is_some() {
return Err(eyre!("Cannot filter metadata in json+scale format"));
} else {
let encoded = self.runtime_metadata_prefixed().encode();
let hex = format!("0x{}", hex::encode(encoded));
let json = serde_json::to_string_pretty(&serde_json::json!({ "result": hex }))?;
let _ = print_big_output_safe(&json);
}

OutputFormat::JsonScale if filter.is_none() => {
let encoded = self.runtime_metadata_prefixed().encode();
let hex = format!("0x{}", hex::encode(encoded));
let serialized = serde_json::to_string_pretty(&serde_json::json!({ "result": hex }))?;
let _ = print_big_output_safe(&serialized);
}

OutputFormat::Json | OutputFormat::Scale | OutputFormat::HexScale | OutputFormat::JsonScale
if filter.is_some() =>
{
return Err(eyre!("Cannot filter metadata for this format"));
}
_ => unreachable!(),
}
Ok(())
}
Expand Down

0 comments on commit d788745

Please sign in to comment.