arch_pkg_db/single/iter/
entries.rs1use super::Entry;
2use crate::QueryDatabase;
3use core::iter::FusedIterator;
4use std::collections::hash_map;
5
6#[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#[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 pub fn entries(&self) -> Entries<'_, 'a, Querier> {
71 Entries {
72 internal: self.internal.iter(),
73 }
74 }
75
76 pub fn entries_mut(&mut self) -> EntriesMut<'_, 'a, Querier> {
78 EntriesMut {
79 internal: self.internal.iter_mut(),
80 }
81 }
82}