arch_pkg_db/single/iter/
entries.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 immutable queriers in a [`QueryDatabase`].
7#[derive(Debug, Clone)]
8pub struct Entries<'r, 'name, Querier> {
9    internal: hash_map::Iter<'r, &'name str, Querier>,
10}
11
12impl<'r, 'name, Querier> Iterator for Entries<'r, 'name, Querier> {
13    type Item = Entry<'name, &'r 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 Entries<'_, '_, Querier> {
30    fn len(&self) -> usize {
31        self.internal.len()
32    }
33}
34
35impl<Querier> FusedIterator for Entries<'_, '_, Querier> {}
36
37/// [Iterator] over all pairs of [package names](arch_pkg_text::value::Name) and mutable queriers in a [`QueryDatabase`].
38#[derive(Debug)]
39pub struct EntriesMut<'r, 'name, Querier> {
40    internal: hash_map::IterMut<'r, &'name str, Querier>,
41}
42
43impl<'r, 'name, Querier> Iterator for EntriesMut<'r, 'name, Querier> {
44    type Item = Entry<'name, &'r mut Querier>;
45
46    fn next(&mut self) -> Option<Self::Item> {
47        let (name, querier) = self.internal.next()?;
48        Some(Entry::new_unchecked(name, querier))
49    }
50
51    fn size_hint(&self) -> (usize, Option<usize>) {
52        self.internal.size_hint()
53    }
54
55    fn count(self) -> usize {
56        self.internal.count()
57    }
58}
59
60impl<Querier> ExactSizeIterator for EntriesMut<'_, '_, Querier> {
61    fn len(&self) -> usize {
62        self.internal.len()
63    }
64}
65
66impl<Querier> FusedIterator for EntriesMut<'_, '_, Querier> {}
67
68impl<'a, Querier> QueryDatabase<'a, Querier> {
69    /// Get an iterator over all pairs of [package names](arch_pkg_text::value::Name) and immutable queriers.
70    pub fn entries(&self) -> Entries<'_, 'a, Querier> {
71        Entries {
72            internal: self.internal.iter(),
73        }
74    }
75
76    /// Get an iterator over all pairs of [package names](arch_pkg_text::value::Name) and mutable queriers.
77    pub fn entries_mut(&mut self) -> EntriesMut<'_, 'a, Querier> {
78        EntriesMut {
79            internal: self.internal.iter_mut(),
80        }
81    }
82}