gluesql_utils/
hashmap.rs

1use std::{
2    collections::HashMap,
3    hash::{BuildHasher, Hash},
4};
5
6pub trait HashMapExt<K, V, I> {
7    #[must_use]
8    fn concat(self, entries: I) -> Self;
9}
10
11impl<K, V, I, S: BuildHasher> HashMapExt<K, V, I> for HashMap<K, V, S>
12where
13    K: Hash + Eq,
14    I: Iterator<Item = (K, V)>,
15{
16    fn concat(mut self, entries: I) -> Self {
17        for (key, value) in entries {
18            self.insert(key, value);
19        }
20
21        self
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use {super::HashMapExt, std::collections::HashMap};
28
29    #[test]
30    fn concat() {
31        let values: HashMap<&str, i64> = [("a", 10), ("b", 20)].into();
32        let new_items = [("c", 30), ("d", 40), ("e", 50)];
33
34        let actual = values.concat(new_items.into_iter());
35        let expected = [("a", 10), ("b", 20), ("c", 30), ("d", 40), ("e", 50)].into();
36
37        assert_eq!(actual, expected);
38    }
39}