#[macro_export]
macro_rules! hash {
($e:expr) => {{
use ::std::{
collections::hash_map::DefaultHasher,
hash::{Hash, Hasher},
};
let mut hasher = DefaultHasher::new();
$e.hash(&mut hasher);
hasher.finish()
}};
($e:expr, $hasher:expr) => {{
use ::std::hash::{Hash, Hasher};
let mut hasher = $hasher;
$e.hash(&mut hasher);
hasher.finish()
}};
}
#[cfg(test)]
mod tests {
use std::collections::hash_map::DefaultHasher;
#[test]
fn hash_default() {
let a = "b";
let expected = 16_993_177_596_579_750_922;
let test = hash!(a);
assert_eq!(expected, test);
}
#[test]
fn hash_with_hasher() {
let a = "b";
let expected = 16_993_177_596_579_750_922;
let test = hash!(a, DefaultHasher::new());
assert_eq!(expected, test);
}
}