Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: improve JSON output for upload and remove commands
Browse files Browse the repository at this point in the history
This commit addresses an issue where the JSON output for both the upload and remove commands in cargo contract was in an invalid format.

This commit refactors the JSON structure for these commands, resulting in valid JSON objects.

Signed-off-by: Tarek <tareknaser360@gmail.com>
tareknaser committed Nov 23, 2023
1 parent c9786ba commit e7670d1
Showing 2 changed files with 17 additions and 25 deletions.
11 changes: 8 additions & 3 deletions crates/cargo-contract/src/cmd/remove.rs
Original file line number Diff line number Diff line change
@@ -62,21 +62,26 @@ impl RemoveCommand {
.await?;
let remove_result = remove_exec.remove_code().await?;
let display_events = remove_result.display_events;
let output = if self.output_json() {
let output_events = if self.output_json() {
display_events.to_json()?
} else {
display_events.display_events(
self.extrinsic_cli_opts.verbosity().unwrap(),
remove_exec.token_metadata(),
)?
};
println!("{output}");
if let Some(code_removed) = remove_result.code_removed {
let remove_result = code_removed.code_hash;

if self.output_json() {
println!("{}", &remove_result);
let json_object = serde_json::json!({
"events": serde_json::from_str::<serde_json::Value>(&output_events)?,
"removed_code_hash": remove_result,
});
let json_object = serde_json::to_string_pretty(&json_object)?;
println!("{}", json_object);
} else {
println!("{}", output_events);
name_value_println!("Code hash", format!("{remove_result:?}"));
}
Result::<(), ErrorVariant>::Ok(())
31 changes: 9 additions & 22 deletions crates/cargo-contract/src/cmd/upload.rs
Original file line number Diff line number Diff line change
@@ -88,23 +88,25 @@ impl UploadCommand {
} else {
let upload_result = upload_exec.upload_code().await?;
let display_events = upload_result.display_events;
let output = if self.output_json() {
let output_events = if self.output_json() {
display_events.to_json()?
} else {
display_events.display_events(
self.extrinsic_cli_opts.verbosity()?,
upload_exec.token_metadata(),
)?
};
println!("{output}");
if let Some(code_stored) = upload_result.code_stored {
let upload_result = CodeHashResult {
code_hash: format!("{:?}", code_stored.code_hash),
};
let code_hash = code_stored.code_hash;
if self.output_json() {
println!("{}", upload_result.to_json()?);
let json_object = serde_json::json!({
"events": serde_json::from_str::<serde_json::Value>(&output_events)?,
"code_hash": code_hash,
});
println!("{}", serde_json::to_string_pretty(&json_object)?);
} else {
upload_result.print();
println!("{}", output_events);
name_value_println!("Code hash", format!("{:?}", code_hash));
}
} else {
let code_hash = hex::encode(code_hash);
@@ -118,21 +120,6 @@ impl UploadCommand {
}
}

#[derive(serde::Serialize)]
pub struct CodeHashResult {
pub code_hash: String,
}

impl CodeHashResult {
pub fn to_json(&self) -> Result<String> {
Ok(serde_json::to_string_pretty(self)?)
}

pub fn print(&self) {
name_value_println!("Code hash", format!("{:?}", self.code_hash));
}
}

#[derive(serde::Serialize)]
pub struct UploadDryRunResult {
pub result: String,

0 comments on commit e7670d1

Please sign in to comment.