Skip to main content

crate_seq_ledger/
query.rs

1//! `SemVer`-ordered filter helpers on [`CrateSeqLedger`].
2
3use crate::{CrateSeqLedger, LedgerEntry, LedgerStatus};
4
5impl CrateSeqLedger {
6    /// Entries with status [`LedgerStatus::Pending`], sorted ascending by version.
7    #[must_use]
8    pub fn pending_versions(&self) -> Vec<&LedgerEntry> {
9        let mut entries: Vec<&LedgerEntry> = self
10            .entries
11            .iter()
12            .filter(|e| e.status == LedgerStatus::Pending)
13            .collect();
14        entries.sort_by(|a, b| a.version.cmp(&b.version));
15        entries
16    }
17
18    /// Entries with status [`LedgerStatus::Published`], sorted ascending by version.
19    #[must_use]
20    pub fn published_versions(&self) -> Vec<&LedgerEntry> {
21        let mut entries: Vec<&LedgerEntry> = self
22            .entries
23            .iter()
24            .filter(|e| e.status == LedgerStatus::Published)
25            .collect();
26        entries.sort_by(|a, b| a.version.cmp(&b.version));
27        entries
28    }
29
30    /// First entry whose version equals `v`.
31    #[must_use]
32    pub fn find_version(&self, v: &semver::Version) -> Option<&LedgerEntry> {
33        self.entries.iter().find(|e| &e.version == v)
34    }
35}