use serde::{Deserialize, Serialize};
use sha2::{Digest, Sha256};
use std::fmt::Write as _;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PrivateTraceEntry {
pub trace_id: String,
pub inputs_hash: String,
pub outputs_hash: String,
pub resource_usage_ms: u64,
}
impl PrivateTraceEntry {
#[must_use]
pub fn new(trace_id: String, inputs: &str, outputs: &str, resource_usage_ms: u64) -> Self {
Self {
trace_id,
inputs_hash: sha256_hex(inputs),
outputs_hash: sha256_hex(outputs),
resource_usage_ms,
}
}
}
fn sha256_hex(data: &str) -> String {
let mut hasher = Sha256::new();
hasher.update(data.as_bytes());
hasher
.finalize()
.iter()
.fold(String::new(), |mut acc, byte| {
let _ = write!(acc, "{byte:02x}");
acc
})
}