arch_pkg_db/multi/iter/
names.rs1use crate::multi::{MultiQuerier, MultiQueryDatabase, MultiQueryDatabaseLatest};
2use arch_pkg_text::value::Name;
3use core::iter::FusedIterator;
4use core::ops::Deref;
5use std::collections::hash_map::Keys;
6
7#[derive(Debug, Clone)]
9pub struct Names<'r, 'query, Querier> {
10 internal: Keys<'r, &'query str, MultiQuerier<'query, Querier>>,
11}
12
13impl<'query, Querier> Iterator for Names<'_, 'query, Querier> {
14 type Item = Name<'query>;
15
16 fn next(&mut self) -> Option<Self::Item> {
17 self.internal.next().copied().map(Name)
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 Names<'_, '_, Querier> {
30 fn len(&self) -> usize {
31 self.internal.len()
32 }
33}
34
35impl<Querier> FusedIterator for Names<'_, '_, Querier> {}
36
37impl<'a, Querier> MultiQueryDatabase<'a, Querier> {
38 pub fn names(&self) -> Names<'_, 'a, Querier> {
40 Names {
41 internal: self.internal.keys(),
42 }
43 }
44}
45
46impl<Ref> MultiQueryDatabaseLatest<Ref> {
47 pub fn names<'a, Querier>(&self) -> Names<'_, 'a, Querier>
49 where
50 Ref: Deref<Target = MultiQueryDatabase<'a, Querier>>,
51 {
52 self.base.names()
53 }
54}