use blake3::Hash;
use std::io;
pub trait Hasher: Send + Sync {
fn hash(&self, data: &[u8]) -> Hash;
fn hash_reader(&self, reader: &mut dyn io::Read) -> io::Result<Hash>;
}
pub struct Blake3Hasher;
impl Hasher for Blake3Hasher {
fn hash(&self, data: &[u8]) -> Hash {
blake3::hash(data)
}
fn hash_reader(&self, reader: &mut dyn io::Read) -> io::Result<Hash> {
let mut hasher = blake3::Hasher::new();
io::copy(reader, &mut hasher)?;
Ok(hasher.finalize())
}
}