Skip to main content

spreadsheet_mcp/diff/
hash.rs

1use sha2::{Digest, Sha256};
2use std::io::Read;
3
4pub fn compute_hash<R: Read>(mut reader: R) -> std::io::Result<u64> {
5    let mut hasher = Sha256::new();
6    // Copy to hasher adapter
7    std::io::copy(&mut reader, &mut DigestWriter(&mut hasher))?;
8    let result = hasher.finalize();
9    // Use first 8 bytes for u64 hash
10    let mut buf = [0u8; 8];
11    buf.copy_from_slice(&result[0..8]);
12    Ok(u64::from_le_bytes(buf))
13}
14
15struct DigestWriter<'a, D: Digest>(&'a mut D);
16
17impl<'a, D: Digest> std::io::Write for DigestWriter<'a, D> {
18    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
19        self.0.update(buf);
20        Ok(buf.len())
21    }
22
23    fn flush(&mut self) -> std::io::Result<()> {
24        Ok(())
25    }
26}