| 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(&hasher) |
| } |
| |
| 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(&hasher)) |
| } |
| |
| pub fn short_hash<H: Hash>(hashable: &H) -> String { |
| to_hex(hash_u64(hashable)) |
| } |