use alloc::string::String;
use sha2::{Digest, Sha256};
pub const CONTENT_HASH_LEN: usize = 16;
#[must_use]
pub fn content_hash(bytes: &[u8]) -> String {
let digest = Sha256::digest(bytes);
let mut out = String::with_capacity(CONTENT_HASH_LEN);
for byte in digest.iter().take(CONTENT_HASH_LEN / 2) {
out.push(hex(byte >> 4));
out.push(hex(byte & 0xF));
}
out
}
fn hex(nibble: u8) -> char {
char::from_digit(u32::from(nibble), 16).unwrap_or('0')
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_the_sha256_prefix() {
assert_eq!(content_hash(b""), "e3b0c44298fc1c14");
assert_eq!(content_hash(b"abc"), "ba7816bf8f01cfea");
}
}