diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2021-10-16 11:26:45 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2021-10-16 11:27:19 +0200 |
commit | e96e7911d90e495ff161cd32efe020e774b9200c (patch) | |
tree | 3b0d54377bc0d32c1fdc7288f0ba1099e0b4ba9f | |
parent | 9c1aa9dd8ea6bd7e9f7ded3c4b7218877d942f93 (diff) |
Refactor collecting into helper fn
Signed-off-by: Matthias Beyer <mail@beyermatthias.de>
-rw-r--r-- | src/hashmap.rs | 40 |
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) } |