spreadsheet_mcp/diff/
hash.rs1use 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 std::io::copy(&mut reader, &mut DigestWriter(&mut hasher))?;
8 let result = hasher.finalize();
9 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}