1use serde::Serialize;
2
3use crate::{FibQuantError, Result};
4
5pub fn json_digest<T: Serialize>(domain: &str, value: &T) -> Result<String> {
7 let mut bytes = Vec::new();
8 bytes.extend_from_slice(domain.as_bytes());
9 bytes.push(0);
10 serde_json::to_writer(&mut bytes, value)
11 .map_err(|err| FibQuantError::NumericalFailure(format!("json digest encode: {err}")))?;
12 Ok(bytes_digest(&bytes))
13}
14
15pub fn bytes_digest(bytes: &[u8]) -> String {
17 format!("blake3:{}", blake3::hash(bytes).to_hex())
18}