arch_pkg_db/multi/iter/
from.rs1use crate::{
2 multi::{InsertError, MultiQueryDatabase},
3 value::RepositoryName,
4};
5use arch_pkg_text::{
6 desc::{Query, QueryMut},
7 misc::desc::ShouldReuse,
8};
9
10impl<'a, Querier: ShouldReuse> MultiQueryDatabase<'a, Querier> {
11 fn from_queriers_with<PairIter, Insert, InsertSuccess, InsertError>(
13 pairs: PairIter,
14 mut insert: Insert,
15 ) -> Result<Self, InsertError>
16 where
17 PairIter: IntoIterator<Item = (RepositoryName<'a>, Querier)>,
18 Insert: FnMut(&mut Self, RepositoryName<'a>, Querier) -> Result<InsertSuccess, InsertError>,
19 {
20 let pairs = pairs.into_iter();
21 let (cap, _) = pairs.size_hint();
22 let mut db = MultiQueryDatabase::with_capacity(cap);
23 for (repo, querier) in pairs {
24 insert(&mut db, repo, querier)?;
25 }
26 Ok(db)
27 }
28
29 pub fn from_queriers<PairIter>(pairs: PairIter) -> Result<Self, InsertError<'a>>
35 where
36 Querier: Query<'a>,
37 PairIter: IntoIterator<Item = (RepositoryName<'a>, Querier)>,
38 {
39 MultiQueryDatabase::from_queriers_with(pairs, MultiQueryDatabase::insert)
40 }
41
42 pub fn from_queriers_mut<PairIter>(pairs: PairIter) -> Result<Self, InsertError<'a>>
48 where
49 Querier: QueryMut<'a>,
50 PairIter: IntoIterator<Item = (RepositoryName<'a>, Querier)>,
51 {
52 MultiQueryDatabase::from_queriers_with(pairs, MultiQueryDatabase::insert_mut)
53 }
54
55 pub fn from_newer_queriers<PairIter>(pairs: PairIter) -> Result<Self, InsertError<'a>>
61 where
62 Querier: Query<'a>,
63 PairIter: IntoIterator<Item = (RepositoryName<'a>, Querier)>,
64 {
65 MultiQueryDatabase::from_queriers_with(pairs, MultiQueryDatabase::insert_newer)
66 }
67
68 pub fn from_newer_queriers_mut<PairIter>(pairs: PairIter) -> Result<Self, InsertError<'a>>
74 where
75 Querier: QueryMut<'a>,
76 PairIter: IntoIterator<Item = (RepositoryName<'a>, Querier)>,
77 {
78 MultiQueryDatabase::from_queriers_with(pairs, MultiQueryDatabase::insert_newer_mut)
79 }
80}