arch_pkg_db/text/multi/
extend.rs

1use 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}