rust_releases_core/
lib.rs1#![allow(missing_docs)]
8#![deny(clippy::all)]
9#![deny(unsafe_code)]
10
11pub use crate::releases::{BetaReleases, NightlyReleases, StableReleases};
12pub 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 pub fn stable(&self) -> impl IntoIterator<Item = &RustRelease<Stable>> {
29 self.stable.iter()
30 }
31
32 pub fn beta(&self) -> impl IntoIterator<Item = &RustRelease<Beta>> {
34 self.beta.iter()
35 }
36
37 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}