use std::collections::HashMap;
use std::hash::Hash;
pub fn append_or_overwrite<K: Eq + Hash, V>(left: &mut HashMap<K, V>, right: HashMap<K, V>) {
left.extend(right)
}
pub fn append_or_ignore<K: Eq + Hash, V>(left: &mut HashMap<K, V>, right: HashMap<K, V>) {
for (k, v) in right {
left.entry(k).or_insert(v);
}
}
pub fn append_or_recurse<K: Eq + Hash, V: crate::Merge>(
left: &mut HashMap<K, V>,
right: HashMap<K, V>,
) {
use std::collections::hash_map::Entry;
for (k, v) in right {
match left.entry(k) {
Entry::Occupied(mut existing) => existing.get_mut().merge(v),
Entry::Vacant(empty) => {
empty.insert(v);
}
}
}
}