near_stable_hasher/
lib.rs

1#[allow(deprecated)]
2use std::hash::{Hasher, SipHasher};
3
4/// We not use stable hasher as it could change with Rust releases, so rely on stable SIP hash.
5#[allow(deprecated)]
6#[derive(Default, Clone)]
7pub struct StableHasher(pub SipHasher);
8
9impl StableHasher {
10    #[allow(deprecated)]
11    pub fn new() -> StableHasher {
12        StableHasher(SipHasher::new())
13    }
14}
15
16impl Hasher for StableHasher {
17    fn finish(&self) -> u64 {
18        self.0.finish()
19    }
20    fn write(&mut self, bytes: &[u8]) {
21        self.0.write(bytes)
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use crate::StableHasher;
28    use std::hash::Hasher;
29
30    /// Make sure the stable hasher never changes
31    #[test]
32    fn test_stable_hasher() {
33        let mut sh = StableHasher::new();
34
35        sh.write(&[1, 2, 3, 4, 5]);
36        let finish = sh.finish();
37        assert_eq!(finish, 12661990674860217757)
38    }
39}