hash_serialized_json/
hash_serialized_json.rs1use ic_host_tools::artifact::{BoundedWriter, Sha256Digest, read_reader};
4use sha2::{Digest, Sha256};
5use std::{env, error::Error, io};
6
7fn main() -> Result<(), Box<dyn Error>> {
8 let args: Vec<_> = env::args().collect();
9 if args.len() != 3 {
10 return Err("usage: hash_serialized_json INPUT_BYTES OUTPUT_BYTES < input.json".into());
11 }
12 let input_limit: usize = args[1].parse()?;
13 let output_limit: u64 = args[2].parse()?;
14 let input = read_reader(io::stdin().lock(), input_limit)?;
15 let value: serde_json::Value = serde_json::from_slice(&input)?;
16 let mut writer = BoundedWriter::new(Sha256::new(), output_limit);
17 serde_json::to_writer(&mut writer, &value)?;
18 let count = writer.bytes_written();
19 let digest = Sha256Digest::from_bytes(writer.into_inner().finalize().into());
20 println!("serialized_bytes={count} sha256={digest}");
21 Ok(())
22}