1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use super::StableHasher;
use std::fs::File;
use std::hash::{Hash, Hasher};
use std::io::Read;
pub fn to_hex(num: u64) -> String {
hex::encode(num.to_le_bytes())
}
pub fn hash_u64<H: Hash>(hashable: H) -> u64 {
let mut hasher = StableHasher::new();
hashable.hash(&mut hasher);
hasher.finish()
}
pub fn hash_u64_file(mut file: &File) -> std::io::Result<u64> {
let mut hasher = StableHasher::new();
let mut buf = [0; 64 * 1024];
loop {
let n = file.read(&mut buf)?;
if n == 0 {
break;
}
hasher.write(&buf[..n]);
}
Ok(hasher.finish())
}
pub fn short_hash<H: Hash>(hashable: &H) -> String {
to_hex(hash_u64(hashable))
}