summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-10-16 11:26:45 +0200
committerMatthias Beyer <mail@beyermatthias.de>2021-10-16 11:27:19 +0200
commite96e7911d90e495ff161cd32efe020e774b9200c (patch)
tree3b0d54377bc0d32c1fdc7288f0ba1099e0b4ba9f
parent9c1aa9dd8ea6bd7e9f7ded3c4b7218877d942f93 (diff)
Refactor collecting into helper fn
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r--src/hashmap.rs40
1 files changed, 16 insertions, 24 deletions
diff --git a/src/hashmap.rs b/src/hashmap.rs
index 60bc88a..407eefe 100644
--- a/src/hashmap.rs
+++ b/src/hashmap.rs
@@ -59,20 +59,8 @@ impl<K, V> FromIterator<(K, V)> for CollectOnceHashMap<K, V, std::collections::h
}
};
- let mut hm = HashMap::with_capacity(iter_size);
-
- for (element_key, element_value) in iter.into_iter() {
- if hm.contains_key(&element_key) {
- return CollectOnceHashMap {
- inner: Err(Error::DuplicatedKey(element_key))
- }
- } else {
- hm.insert(element_key, element_value);
- }
- }
-
CollectOnceHashMap {
- inner: Ok(hm)
+ inner: collect_into_hm(HashMap::with_capacity(iter_size), iter)
}
}
}
@@ -98,21 +86,25 @@ impl<K, V> FromIterator<(K, V)> for CollectOnceHashMapNoPrealloc<K, V, std::coll
fn from_iter<T>(iter: T) -> Self
where T: IntoIterator<Item = (K, V)>
{
- let mut hm = HashMap::new();
- for (element_key, element_value) in iter.into_iter() {
- if hm.contains_key(&element_key) {
- return CollectOnceHashMapNoPrealloc {
- inner: Err(Error::DuplicatedKey(element_key))
- }
- } else {
- hm.insert(element_key, element_value);
- }
+ CollectOnceHashMapNoPrealloc {
+ inner: collect_into_hm(HashMap::new(), iter)
}
+ }
+}
- CollectOnceHashMapNoPrealloc {
- inner: Ok(hm)
+fn collect_into_hm<K, V, T>(mut hm: HashMap<K, V>, iter: T) -> std::result::Result<HashMap<K, V>, Error<K>>
+ where K: Eq + Hash + Debug,
+ T: IntoIterator<Item = (K, V)>
+{
+ for (element_key, element_value) in iter.into_iter() {
+ if hm.contains_key(&element_key) {
+ return Err(Error::DuplicatedKey(element_key))
+ } else {
+ hm.insert(element_key, element_value);
}
}
+
+ Ok(hm)
}