use std::collections::HashMap;
use std::hash::BuildHasher;
use std::hash::BuildHasherDefault;
use std::hash::Hash;
use std::hash::Hasher;
type IdentityHasher = BuildHasherDefault<std::collections::hash_map::DefaultHasher>;
pub(crate) fn hash_string_map<H: Hasher>(value: &HashMap<String, String>, state: &mut H) {
value.len().hash(state);
let mut sum = 0_u64;
let mut xor = 0_u64;
for (key, value) in value {
let mut entry = IdentityHasher::default().build_hasher();
key.hash(&mut entry);
value.hash(&mut entry);
let hash = entry.finish();
sum = sum.wrapping_add(hash);
xor ^= hash.rotate_left(17);
}
sum.hash(state);
xor.hash(state);
}