arch_pkg_db/single/
extend.rs1use super::{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 extend_with<QuerierIter, Insert, InsertSuccess, InsertError>(
10 &mut self,
11 queriers: QuerierIter,
12 mut insert: Insert,
13 ) -> Result<(), InsertError>
14 where
15 QuerierIter: IntoIterator<Item = Querier>,
16 Insert: FnMut(&mut Self, Querier) -> Result<InsertSuccess, InsertError>,
17 {
18 let queriers = queriers.into_iter();
19 let (cap, _) = queriers.size_hint();
20 self.internal.reserve(cap);
21 for querier in queriers {
22 insert(self, querier)?;
23 }
24 Ok(())
25 }
26
27 pub fn extend<QuerierIter>(&mut self, queriers: QuerierIter) -> Result<(), InsertError>
31 where
32 Querier: Query<'a>,
33 QuerierIter: IntoIterator<Item = Querier>,
34 {
35 self.extend_with(queriers, QueryDatabase::insert)
36 }
37
38 pub fn extend_mut<QuerierIter>(&mut self, queriers: QuerierIter) -> Result<(), InsertError>
42 where
43 Querier: QueryMut<'a>,
44 QuerierIter: IntoIterator<Item = Querier>,
45 {
46 self.extend_with(queriers, QueryDatabase::insert_mut)
47 }
48
49 pub fn extend_newer<QuerierIter>(
52 &mut self,
53 queriers: QuerierIter,
54 ) -> Result<(), InsertNewerError<'_>>
55 where
56 Querier: Query<'a>,
57 QuerierIter: IntoIterator<Item = Querier>,
58 {
59 self.extend_with(queriers, QueryDatabase::insert_newer)
60 }
61
62 pub fn extend_newer_mut<QuerierIter>(
65 &mut self,
66 queriers: QuerierIter,
67 ) -> Result<(), InsertNewerError<'_>>
68 where
69 Querier: QueryMut<'a>,
70 QuerierIter: IntoIterator<Item = Querier>,
71 {
72 self.extend_with(queriers, QueryDatabase::insert_newer_mut)
73 }
74}