Skip to main content

rust_releases_core/
lib.rs

1//! Defines the core routines required to implement a [`Source`].
2//!
3//! Please, see the [`rust-releases`] for additional documentation on how this crate can be used.
4//!
5//! [`Source`]: crate::Source
6//! [`rust-releases`]: https://docs.rs/rust-releases
7#![allow(missing_docs)]
8#![deny(clippy::all)]
9#![deny(unsafe_code)]
10
11pub use crate::releases::{BetaReleases, NightlyReleases, StableReleases};
12/// Defines release channels, such as the stable, beta and nightly release channels.
13pub use rust_release::{self, Beta, Nightly, RustRelease, Stable};
14
15pub mod channel;
16pub mod merge;
17pub mod releases;
18
19#[derive(Debug, Default)]
20pub struct RustReleases {
21    stable: StableReleases,
22    beta: BetaReleases,
23    nightly: NightlyReleases,
24}
25
26impl RustReleases {
27    /// Iterate over set of stable releases
28    pub fn stable(&self) -> impl IntoIterator<Item = &RustRelease<Stable>> {
29        self.stable.iter()
30    }
31
32    /// Iterate over set of beta releases
33    pub fn beta(&self) -> impl IntoIterator<Item = &RustRelease<Beta>> {
34        self.beta.iter()
35    }
36
37    /// Iterate over set of nightly releases
38    pub fn nightly(&self) -> impl IntoIterator<Item = &RustRelease<Nightly>> {
39        self.nightly.iter()
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46    use crate::merge;
47
48    #[test]
49    fn empty_merge_is_empty() {
50        let mut out = StableReleases::<()>::default();
51
52        let left: Vec<RustRelease<Stable>> = vec![];
53        let right: Vec<RustRelease<Stable>> = vec![];
54        for (l, r) in left.into_iter().zip(right) {
55            out.add(merge::merge_default(l, r));
56        }
57
58        assert!(out.is_empty());
59    }
60
61    #[test]
62    fn base() {
63        let left = RustRelease::new(Stable::new(1, 2, 0), None, []);
64        let right = RustRelease::new(Stable::new(1, 2, 0), None, []);
65
66        let mut out = StableReleases::default();
67        out.add(merge::merge_default(left, right));
68
69        assert_eq!(out.len(), 1);
70
71        let first = out.iter().next().unwrap();
72
73        assert_eq!(first.version(), &Stable::new(1, 2, 0));
74        assert_eq!(first.release_date(), None);
75        assert_eq!(first.toolchains().count(), 0);
76    }
77}