Trait nohash_hasher::IsEnabled [−][src]
Types which are safe to use with NoHashHasher
.
This marker trait is an option for types to enable themselves for use
with NoHashHasher
. In order to be safe, the Hash
impl needs to
satisfy the following constraint:
One of the
Hasher::write_{u8,u16,u32,u64,usize,i8,i16,i32,i64,isize}
methods is invoked exactly once.
The best way to ensure this is to write a custom Hash
impl even when
deriving Hash
for a simple newtype of a single type which itself
implements IsEnabled
may work as well.
Example
#[derive(PartialEq, Eq)] struct SomeType(u32); impl std::hash::Hash for SomeType { fn hash<H: std::hash::Hasher>(&self, hasher: &mut H) { hasher.write_u32(self.0) } } impl nohash_hasher::IsEnabled for SomeType {} let mut m = nohash_hasher::IntMap::default(); m.insert(SomeType(1), 't'); m.insert(SomeType(0), 'f'); assert_eq!(Some(&'t'), m.get(&SomeType(1))); assert_eq!(Some(&'f'), m.get(&SomeType(0)));