arch_pkg_db/single/iter/
queriers.rs

1use crate::QueryDatabase;
2use core::iter::FusedIterator;
3use std::collections::hash_map::{Values, ValuesMut};
4
5/// [Iterator] over all immutable queriers in a [`QueryDatabase`].
6#[derive(Debug, Clone)]
7pub struct Queriers<'r, 'name, Querier> {
8    internal: Values<'r, &'name str, Querier>,
9}
10
11impl<'r, Querier> Iterator for Queriers<'r, '_, Querier> {
12    type Item = &'r Querier;
13
14    fn next(&mut self) -> Option<Self::Item> {
15        self.internal.next()
16    }
17
18    fn size_hint(&self) -> (usize, Option<usize>) {
19        self.internal.size_hint()
20    }
21
22    fn count(self) -> usize {
23        self.internal.count()
24    }
25}
26
27impl<Querier> ExactSizeIterator for Queriers<'_, '_, Querier> {
28    fn len(&self) -> usize {
29        self.internal.len()
30    }
31}
32
33impl<Querier> FusedIterator for Queriers<'_, '_, Querier> {}
34
35/// [Iterator] over all mutable queriers in a [`QueryDatabase`].
36#[derive(Debug)]
37pub struct QueriersMut<'r, 'name, Querier> {
38    internal: ValuesMut<'r, &'name str, Querier>,
39}
40
41impl<'r, Querier> Iterator for QueriersMut<'r, '_, Querier> {
42    type Item = &'r mut Querier;
43
44    fn next(&mut self) -> Option<Self::Item> {
45        self.internal.next()
46    }
47
48    fn size_hint(&self) -> (usize, Option<usize>) {
49        self.internal.size_hint()
50    }
51
52    fn count(self) -> usize {
53        self.internal.count()
54    }
55}
56
57impl<Querier> ExactSizeIterator for QueriersMut<'_, '_, Querier> {
58    fn len(&self) -> usize {
59        self.internal.len()
60    }
61}
62
63impl<Querier> FusedIterator for QueriersMut<'_, '_, Querier> {}
64
65impl<'a, Querier> QueryDatabase<'a, Querier> {
66    /// Get an iterator over all immutable queriers.
67    pub fn queriers(&self) -> Queriers<'_, 'a, Querier> {
68        Queriers {
69            internal: self.internal.values(),
70        }
71    }
72
73    /// Get an iterator over all mutable queriers.
74    pub fn queriers_mut(&mut self) -> QueriersMut<'_, 'a, Querier> {
75        QueriersMut {
76            internal: self.internal.values_mut(),
77        }
78    }
79}