arch_pkg_db/text/multi/
extend.rs1use super::MultiTextCollection;
2use crate::{Text, TextCollection, value::RepositoryName};
3use itertools::Itertools;
4
5impl<'a> Extend<(RepositoryName<'a>, TextCollection)> for MultiTextCollection<'a> {
6 fn extend<Iter: IntoIterator<Item = (RepositoryName<'a>, TextCollection)>>(
7 &mut self,
8 iter: Iter,
9 ) {
10 let iter = iter.into_iter();
11 let (cap, _) = iter.size_hint();
12 self.internal.reserve(cap);
13 for (repository, collection) in iter {
14 self.insert(repository, collection);
15 }
16 }
17}
18
19impl<'a> Extend<(RepositoryName<'a>, Text)> for MultiTextCollection<'a> {
20 fn extend<Iter: IntoIterator<Item = (RepositoryName<'a>, Text)>>(&mut self, iter: Iter) {
21 let chunks = iter.into_iter().chunk_by(|&(repository, _)| repository);
22 let iter = chunks.into_iter().map(|(repository, group)| {
23 (
24 repository,
25 group
26 .inspect(|(expected, _)| debug_assert_eq!(&repository, expected))
27 .map(|(_, text)| text)
28 .collect::<TextCollection>(),
29 )
30 });
31 self.extend(iter);
32 }
33}