initial commit

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I4a6b498153eccd5407510dd541b7f4816a6a6964
This commit is contained in:
raf 2026-01-30 22:05:46 +03:00
commit 6a73d11c4b
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
124 changed files with 34856 additions and 0 deletions

View file

@ -0,0 +1,31 @@
use std::path::Path;
use crate::error::Result;
use crate::model::ContentHash;
const BUFFER_SIZE: usize = 65536;
pub async fn compute_file_hash(path: &Path) -> Result<ContentHash> {
let path = path.to_path_buf();
let hash = tokio::task::spawn_blocking(move || -> Result<ContentHash> {
let mut hasher = blake3::Hasher::new();
let mut file = std::fs::File::open(&path)?;
let mut buf = vec![0u8; BUFFER_SIZE];
loop {
let n = std::io::Read::read(&mut file, &mut buf)?;
if n == 0 {
break;
}
hasher.update(&buf[..n]);
}
Ok(ContentHash::new(hasher.finalize().to_hex().to_string()))
})
.await
.map_err(|e| crate::error::PinakesError::Io(std::io::Error::other(e)))??;
Ok(hash)
}
pub fn compute_hash_sync(data: &[u8]) -> ContentHash {
let hash = blake3::hash(data);
ContentHash::new(hash.to_hex().to_string())
}