arch_pkg_db/single/iter/
owned.rs

1use super::Entry;
2use crate::QueryDatabase;
3use core::iter::FusedIterator;
4use std::collections::hash_map;
5
6/// [Iterator] over all pairs of [package names](arch_pkg_text::value::Name) and owned queriers from a [`QueryDatabase`].
7#[derive(Debug)]
8pub struct OwnedEntries<'name, Querier> {
9    internal: hash_map::IntoIter<&'name str, Querier>,
10}
11
12impl<'name, Querier> Iterator for OwnedEntries<'name, Querier> {
13    type Item = Entry<'name, Querier>;
14
15    fn next(&mut self) -> Option<Self::Item> {
16        let (name, querier) = self.internal.next()?;
17        Some(Entry::new_unchecked(name, querier))
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 OwnedEntries<'_, Querier> {
30    fn len(&self) -> usize {
31        self.internal.len()
32    }
33}
34
35impl<Querier> FusedIterator for OwnedEntries<'_, Querier> {}
36
37impl<'a, Querier> IntoIterator for QueryDatabase<'a, Querier> {
38    type IntoIter = OwnedEntries<'a, Querier>;
39    type Item = Entry<'a, Querier>;
40    fn into_iter(self) -> Self::IntoIter {
41        OwnedEntries {
42            internal: self.internal.into_iter(),
43        }
44    }
45}