Skip to content

Commit 71cf103

Browse files
committed
ci: SOlidify error handling
1 parent cb389d5 commit 71cf103

File tree

1 file changed

+71
-40
lines changed

1 file changed

+71
-40
lines changed

cli/src/main.rs

Lines changed: 71 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ fn verify_fragmented(init_pattern: &Path, frag_pattern: &Path) -> Result<Vec<Rea
427427
Ok(readers)
428428
}
429429

430-
// Update/decorate the displayed JSON string for a more human-readable JSON output.
430+
/// Update/decorate the displayed JSON string for a more human-readable JSON output.
431431
fn decorate_json_display(reader: Reader, tokio_runtime: &Runtime) -> String {
432432
let mut reader_content = match reader.json_value_map() {
433433
Ok(mapped_json) => mapped_json,
@@ -465,8 +465,12 @@ fn decorate_json_display(reader: Reader, tokio_runtime: &Runtime) -> String {
465465
}
466466
}
467467

468-
// Update/decorate the displayed JSON assertions for a more human-readable JSON output.
469-
fn decorate_json_assertions(reader: Reader, json_content: &mut Value, tokio_runtime: &Runtime) -> Result<(), Error>{
468+
/// Update/decorate the displayed JSON assertions for a more human-readable JSON output.
469+
fn decorate_json_assertions(
470+
reader: Reader,
471+
json_content: &mut Value,
472+
tokio_runtime: &Runtime,
473+
) -> Result<(), Error> {
470474
if let Value::Object(map) = json_content {
471475
// Iterate over the key-value pairs
472476
for (key, value) in &mut *map {
@@ -475,21 +479,27 @@ fn decorate_json_assertions(reader: Reader, json_content: &mut Value, tokio_runt
475479
let current_manifest = match current_manifest {
476480
Some(current_manifest) => current_manifest,
477481
None => {
478-
return Err(crate::Error::JsonSerializationError("Could not get current manifest".to_string()));
482+
return Err(crate::Error::JsonSerializationError(
483+
"Could not get current manifest".to_string(),
484+
));
479485
}
480486
};
481487

482488
// Get the assertions as array from the JSON
483489
let assertions = match value.get_mut("assertions") {
484490
Some(assertions) => assertions,
485491
None => {
486-
return Err(crate::Error::JsonSerializationError("Could not parse JSON assertions as object".to_string()));
492+
return Err(crate::Error::JsonSerializationError(
493+
"Could not parse JSON assertions as object".to_string(),
494+
));
487495
}
488496
};
489497
let assertions_array = match assertions.as_array_mut() {
490498
Some(assertions_array) => assertions_array,
491499
None => {
492-
return Err(crate::Error::JsonSerializationError("Could not parse JSON assertions as array".to_string()));
500+
return Err(crate::Error::JsonSerializationError(
501+
"Could not parse JSON assertions as array".to_string(),
502+
));
493503
}
494504
};
495505

@@ -498,45 +508,15 @@ fn decorate_json_assertions(reader: Reader, json_content: &mut Value, tokio_runt
498508
let label = match assertion.get("label") {
499509
Some(label) => label.to_string(),
500510
None => {
501-
return Err(crate::Error::JsonSerializationError("Could not parse assertion label".to_string()));
511+
return Err(crate::Error::JsonSerializationError(
512+
"Could not parse assertion label".to_string(),
513+
));
502514
}
503515
};
504516

505517
// for CAWG assertions, further parse the signature
506518
if label.contains("cawg.identity") {
507-
let parsed_cawg_json_string = match get_cawg_details_for_manifest(
508-
current_manifest,
509-
tokio_runtime,
510-
) {
511-
Some(parsed_cawg_json_string) => parsed_cawg_json_string,
512-
None => {
513-
println!("Could not parse CAWG details for manifest (leaving original raw data unformatted)");
514-
continue;
515-
}
516-
};
517-
518-
let assertion_data: &mut serde_json::Value = assertion.get_mut("data").unwrap();
519-
// update signature with parsed content
520-
521-
let parsed_signature = match serde_json::from_str(&parsed_cawg_json_string) {
522-
Ok(parsed_signature) => parsed_signature,
523-
Err(err) => {
524-
println!("Could not parse CAWG signature details: {:?}", err);
525-
continue;
526-
}
527-
};
528-
assertion_data["signature"] = parsed_signature;
529-
530-
// we don't need to show the padding fields either
531-
let assertion_data_map = match assertion_data.as_object_mut() {
532-
Some(assertion_data_map) => assertion_data_map,
533-
None => {
534-
println!("Could not parse assertion data as object");
535-
continue;
536-
}
537-
};
538-
assertion_data_map.remove("pad1");
539-
assertion_data_map.remove("pad2");
519+
decorate_json_cawg_assertions(current_manifest, assertion, tokio_runtime)?;
540520
}
541521
}
542522
}
@@ -545,6 +525,57 @@ fn decorate_json_assertions(reader: Reader, json_content: &mut Value, tokio_runt
545525
Ok(())
546526
}
547527

528+
/// Update/decorate the displayed CAWG assertion for a more human-readable JSON output.
529+
fn decorate_json_cawg_assertions(
530+
holding_manifest: &c2pa::Manifest,
531+
assertion: &mut Value,
532+
tokio_runtime: &Runtime,
533+
) -> Result<(), Error> {
534+
let parsed_cawg_json_string =
535+
match get_cawg_details_for_manifest(holding_manifest, tokio_runtime) {
536+
Some(parsed_cawg_json_string) => parsed_cawg_json_string,
537+
None => {
538+
println!(
539+
"Could not parse CAWG details for manifest (leaving original raw data unformatted)"
540+
);
541+
return Ok(());
542+
}
543+
};
544+
545+
// Let's look at the assertion data
546+
let assertion_data = match assertion.get_mut("data") {
547+
Some(assertion_data) => assertion_data,
548+
None => {
549+
return Err(crate::Error::JsonSerializationError(
550+
"Could not parse CAWG assertion data".to_string(),
551+
));
552+
}
553+
};
554+
555+
// Update signature with parsed content
556+
let parsed_signature = match serde_json::from_str(&parsed_cawg_json_string) {
557+
Ok(parsed_signature) => parsed_signature,
558+
Err(err) => {
559+
return Err(crate::Error::JsonSerializationError(err.to_string()));
560+
}
561+
};
562+
assertion_data["signature"] = parsed_signature;
563+
564+
// We don't need to show the padding fields either
565+
let assertion_data_map = match assertion_data.as_object_mut() {
566+
Some(assertion_data_map) => assertion_data_map,
567+
None => {
568+
return Err(crate::Error::JsonSerializationError(
569+
"Could not parse CAWG assertion data as object".to_string(),
570+
));
571+
}
572+
};
573+
assertion_data_map.remove("pad1");
574+
assertion_data_map.remove("pad2");
575+
576+
Ok(())
577+
}
578+
548579
/// Parse additional CAWG details from the manifest store to update displayed results.
549580
/// As CAWG mostly async, this will block on network requests for checks using a tokio runtime.
550581
fn get_cawg_details_for_manifest(

0 commit comments

Comments
 (0)