arch_pkg_db/single/iter/
names.rs

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