arch_pkg_db/multi/iter/
owned.rs1use crate::{
2 multi::{MultiQuerier, MultiQueryDatabase, WithVersion},
3 value::RepositoryName,
4};
5use arch_pkg_text::value::Name;
6use core::iter::FusedIterator;
7use std::collections::hash_map;
8
9#[derive(Debug)]
11pub struct MultiOwnedEntries<'query, Querier> {
12 internal: hash_map::IntoIter<&'query str, MultiQuerier<'query, Querier>>,
13}
14
15impl<'query, Querier> Iterator for MultiOwnedEntries<'query, Querier> {
16 type Item = (Name<'query>, MultiQuerier<'query, Querier>);
17
18 fn next(&mut self) -> Option<Self::Item> {
19 let (name, querier) = self.internal.next()?;
20 Some((Name(name), querier))
21 }
22
23 fn size_hint(&self) -> (usize, Option<usize>) {
24 self.internal.size_hint()
25 }
26
27 fn count(self) -> usize {
28 self.internal.count()
29 }
30}
31
32impl<Querier> ExactSizeIterator for MultiOwnedEntries<'_, Querier> {
33 fn len(&self) -> usize {
34 self.internal.len()
35 }
36}
37
38impl<Querier> FusedIterator for MultiOwnedEntries<'_, Querier> {}
39
40impl<'a, Querier> IntoIterator for MultiQueryDatabase<'a, Querier> {
41 type IntoIter = MultiOwnedEntries<'a, Querier>;
42 type Item = (Name<'a>, MultiQuerier<'a, Querier>);
43 fn into_iter(self) -> Self::IntoIter {
44 MultiOwnedEntries {
45 internal: self.internal.into_iter(),
46 }
47 }
48}
49
50#[derive(Debug)]
52pub struct OwnedEntries<'query, Querier> {
53 internal: hash_map::IntoIter<&'query str, WithVersion<'query, Querier>>,
54}
55
56impl<'query, Querier> Iterator for OwnedEntries<'query, Querier> {
57 type Item = (RepositoryName<'query>, WithVersion<'query, Querier>);
58
59 fn next(&mut self) -> Option<Self::Item> {
60 let (name, querier) = self.internal.next()?;
61 Some((RepositoryName(name), querier))
62 }
63
64 fn size_hint(&self) -> (usize, Option<usize>) {
65 self.internal.size_hint()
66 }
67
68 fn count(self) -> usize {
69 self.internal.count()
70 }
71}
72
73impl<Querier> ExactSizeIterator for OwnedEntries<'_, Querier> {
74 fn len(&self) -> usize {
75 self.internal.len()
76 }
77}
78
79impl<Querier> FusedIterator for OwnedEntries<'_, Querier> {}
80
81impl<'a, Querier> IntoIterator for MultiQuerier<'a, Querier> {
82 type IntoIter = OwnedEntries<'a, Querier>;
83 type Item = (RepositoryName<'a>, WithVersion<'a, Querier>);
84 fn into_iter(self) -> Self::IntoIter {
85 OwnedEntries {
86 internal: self.internal.into_iter(),
87 }
88 }
89}