Skip to main content

rust_toolchain/channel/
beta.rs

1use crate::RustVersion;
2
3/// The `Beta` release [`channel`]
4///
5/// [`channel`]: https://rust-lang.github.io/rustup/concepts/channels.html
6#[derive(Clone, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)]
7pub struct Beta {
8    /// The three component Rust version
9    pub version: RustVersion,
10    /// The nth pre-release beta version, if any
11    pub prerelease: Option<u32>,
12}
13
14impl Beta {
15    /// Instantiate a new `Beta` struct, representing the version of a release channel.
16    pub fn new(major: u64, minor: u64, patch: u64, prerelease: Option<u32>) -> Self {
17        Self {
18            version: RustVersion::new(major, minor, patch),
19            prerelease,
20        }
21    }
22}
23
24#[cfg(test)]
25mod tests {
26    use crate::{RustVersion, channel::Beta};
27
28    #[yare::parameterized(
29        day1 = { RustVersion::new(0, 0, 0), RustVersion::new(0, 0, 1) },
30        month1 = { RustVersion::new(0, 0, 0), RustVersion::new(0, 1, 0) },
31        year1 = { RustVersion::new(0, 0, 0), RustVersion::new(1, 0, 0) },
32        month_over_day = { RustVersion::new(0, 0, 999), RustVersion::new(0, 1, 0) },
33        year_over_day = { RustVersion::new(0, 0, 999), RustVersion::new(1, 0, 0) },
34        year_over_month = { RustVersion::new(0, 999, 0), RustVersion::new(1, 0, 0) },
35    )]
36    fn ord(left: RustVersion, right: RustVersion) {
37        let left = Beta {
38            version: left,
39            prerelease: None,
40        };
41        let right = Beta {
42            version: right,
43            prerelease: None,
44        };
45
46        assert!(left < right);
47    }
48}