arch_pkg_db/multi/iter/
repositories.rs

1use crate::{
2    multi::{MultiQuerier, WithVersion},
3    value::RepositoryName,
4};
5use std::{collections::hash_map::Keys, iter::FusedIterator};
6
7/// [Iterator] over [repository names](RepositoryName) in a [`MultiQuerier`].
8#[derive(Debug, Clone)]
9pub struct RepositoryNames<'r, 'query, Querier> {
10    internal: Keys<'r, &'query str, WithVersion<'query, Querier>>,
11}
12
13impl<'query, Querier> Iterator for RepositoryNames<'_, 'query, Querier> {
14    type Item = RepositoryName<'query>;
15
16    fn next(&mut self) -> Option<Self::Item> {
17        self.internal.next().copied().map(RepositoryName)
18    }
19
20    fn size_hint(&self) -> (usize, Option<usize>) {
21        self.internal.size_hint()
22    }
23
24    fn count(self) -> usize {
25        self.internal.count()
26    }
27}
28
29impl<Querier> ExactSizeIterator for RepositoryNames<'_, '_, Querier> {
30    fn len(&self) -> usize {
31        self.internal.len()
32    }
33}
34
35impl<Querier> FusedIterator for RepositoryNames<'_, '_, Querier> {}
36
37impl<'a, Querier> MultiQuerier<'a, Querier> {
38    pub fn repositories(&self) -> RepositoryNames<'_, 'a, Querier> {
39        RepositoryNames {
40            internal: self.internal.keys(),
41        }
42    }
43}