arch_pkg_db/multi/
latest.rs

1use super::{LatestQuerier, MultiQuerier, MultiQueryDatabase, MultiQueryDatabaseLatest};
2use crate::{
3    misc::{AttachedUtils, IntoAttached},
4    value::RepositoryName,
5};
6
7impl<'a, Querier> MultiQuerier<'a, Querier> {
8    /// Get an immutable reference to a querier whose package's version is greatest.
9    pub fn latest(&self) -> Option<LatestQuerier<'a, &Querier>> {
10        self.internal
11            .iter()
12            .max_by_key(|(_, querier)| querier.attachment())
13            .map(|(repository, querier)| {
14                querier
15                    .as_deref()
16                    .copied_attachment()
17                    .into_attached(RepositoryName(repository))
18            })
19    }
20
21    /// Get a mutable reference to a querier whose package's version is greatest.
22    pub fn latest_mut(&mut self) -> Option<LatestQuerier<'a, &mut Querier>> {
23        self.internal
24            .iter_mut()
25            .max_by_key(|(_, querier)| *querier.attachment())
26            .map(|(repository, querier)| {
27                querier
28                    .as_deref_mut()
29                    .copied_attachment()
30                    .into_attached(RepositoryName(repository))
31            })
32    }
33}
34
35impl<Querier> MultiQueryDatabase<'_, Querier> {
36    /// Combine the different repositories into a database view of immutable queriers
37    /// that lookup the latest versions of packages.
38    pub fn latest(&self) -> MultiQueryDatabaseLatest<&Self> {
39        MultiQueryDatabaseLatest { base: self }
40    }
41
42    /// Combine the different repositories into a database view of mutable queriers
43    /// that lookup the latest versions of packages.
44    pub fn latest_mut(&mut self) -> MultiQueryDatabaseLatest<&mut Self> {
45        MultiQueryDatabaseLatest { base: self }
46    }
47}