Module scale_info::prelude::hash
1.0.0 · source · [−]Expand description
Generic hashing support.
This module provides a generic way to compute the hash of a value.
Hashes are most commonly used with HashMap
and HashSet
.
The simplest way to make a type hashable is to use #[derive(Hash)]
:
Examples
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, 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!(calculate_hash(&person1) != calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::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::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
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!(calculate_hash(&person1), calculate_hash(&person2));
fn calculate_hash<T: Hash>(t: &T) -> u64 {
let mut s = DefaultHasher::new();
t.hash(&mut s);
s.finish()
}
Macros
Derive macro generating an impl of the trait Hash
.
Structs
Used to create a default BuildHasher
instance for types that implement
Hasher
and Default
.
SipHasherDeprecated
An implementation of SipHash 2-4.
Traits
A trait for creating instances of Hasher
.
A hashable type.
A trait for hashing an arbitrary stream of bytes.