Generic hashing support.
This module provides a generic way to compute the hash of a value. The simplest way to make a type hashable is to use #[derive(Hash)]:
use std::hash::{Hash, SipHasher, Hasher};
#[derive(Hash)]
struct Person {
id: u32,
name: String,
phone: u64,
}
let person1 = Person { id: 5, name: "Janet".to_string(), phone: 555_666_7777 };
let person2 = Person { id: 5, name: "Bob".to_string(), phone: 555_666_7777 };
assert!(hash(&person1) != hash(&person2));
fn hash<T: Hash>(t: &T) -> u64 {
let mut s = SipHasher::new();
t.hash(&mut s);
s.finish()
} If you need more control over how a value is hashed, you need to implement the Hash trait:
use std::hash::{Hash, Hasher, SipHasher};
struct Person {
id: u32,
name: String,
phone: u64,
}
impl Hash for Person {
fn hash<H: Hasher>(&self, state: &mut H) {
self.id.hash(state);
self.phone.hash(state);
}
}
let person1 = Person { id: 5, name: "Janet".to_string(), phone: 555_666_7777 };
let person2 = Person { id: 5, name: "Bob".to_string(), phone: 555_666_7777 };
assert_eq!(hash(&person1), hash(&person2));
fn hash<T: Hash>(t: &T) -> u64 {
let mut s = SipHasher::new();
t.hash(&mut s);
s.finish()
} | BuildHasherDefault | The |
| SipHasher | [ Deprecated ] An implementation of SipHash 2-4. |
| SipHasher13 | [ Deprecated ] [Experimental ] An implementation of SipHash 1-3. |
| SipHasher24 | [ Deprecated ] [Experimental ] An implementation of SipHash 2-4. |
| BuildHasher | A |
| Hash | A hashable type. |
| Hasher | A trait which represents the ability to hash an arbitrary stream of bytes. |
© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/hash/index.html