arch_pkg_db/single/iter/
from.rs1use crate::single::{InsertError, InsertNewerError, QueryDatabase};
2use arch_pkg_text::{
3 desc::{Query, QueryMut},
4 misc::desc::ShouldReuse,
5};
6
7impl<'a, Querier: ShouldReuse> QueryDatabase<'a, Querier> {
8 fn from_queriers_with<QuerierIter, Insert, InsertSuccess, InsertError>(
10 queriers: QuerierIter,
11 mut insert: Insert,
12 ) -> Result<Self, InsertError>
13 where
14 QuerierIter: IntoIterator<Item = Querier>,
15 Insert: FnMut(&mut Self, Querier) -> Result<InsertSuccess, InsertError>,
16 {
17 let queriers = queriers.into_iter();
18 let (cap, _) = queriers.size_hint();
19 let mut db = QueryDatabase::with_capacity(cap);
20 for querier in queriers {
21 insert(&mut db, querier)?;
22 }
23 Ok(db)
24 }
25
26 pub fn from_queriers<QuerierIter>(queriers: QuerierIter) -> Result<Self, InsertError>
30 where
31 Querier: Query<'a>,
32 QuerierIter: IntoIterator<Item = Querier>,
33 {
34 QueryDatabase::from_queriers_with(queriers, QueryDatabase::insert)
35 }
36
37 pub fn from_queriers_mut<QuerierIter>(queriers: QuerierIter) -> Result<Self, InsertError>
41 where
42 Querier: QueryMut<'a>,
43 QuerierIter: IntoIterator<Item = Querier>,
44 {
45 QueryDatabase::from_queriers_with(queriers, QueryDatabase::insert_mut)
46 }
47
48 pub fn from_newer_queriers<QuerierIter>(
53 queriers: QuerierIter,
54 ) -> Result<Self, InsertNewerError<'a>>
55 where
56 Querier: Query<'a>,
57 QuerierIter: IntoIterator<Item = Querier>,
58 {
59 QueryDatabase::from_queriers_with(queriers, QueryDatabase::insert_newer)
60 }
61
62 pub fn from_newer_queriers_mut<QuerierIter>(
67 queriers: QuerierIter,
68 ) -> Result<Self, InsertNewerError<'a>>
69 where
70 Querier: QueryMut<'a>,
71 QuerierIter: IntoIterator<Item = Querier>,
72 {
73 QueryDatabase::from_queriers_with(queriers, QueryDatabase::insert_newer_mut)
74 }
75}