use std::fmt::Write as _;
use std::io::Read;
use sha2::{Digest, Sha256};
pub fn hex_digest(digest: &[u8]) -> String {
let mut hex = String::with_capacity(2 * digest.len());
for byte in digest {
let _ = write!(hex, "{byte:02x}");
}
hex
}
pub fn hash_reader<R: Read>(mut reader: R) -> std::io::Result<String> {
let mut hasher = Sha256::new();
let mut buf = vec![0u8; 64 * 1024];
loop {
let n = reader.read(&mut buf)?;
if n == 0 {
break;
}
hasher.update(&buf[..n]);
}
Ok(hex_digest(&hasher.finalize()))
}