1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
#[macro_export] macro_rules! ident { ($n:literal) => { $crate::Identifier::Numeric($n) }; ($s:ident) => { $crate::Identifier::Alphanumeric(stringify!($s)) }; } #[macro_export] macro_rules! version { ($major:literal,$minor:literal,$patch:literal $(- $( $pre:tt ),*)? $(+ $( $build:tt ),*)?) => { $crate::Version::new($major, $minor, $patch) .pre(&[ $($( $crate::ident!($pre) ),*)? ]) .build(&[ $($( $crate::ident!($build) ),*)? ]) }; } #[cfg(test)] mod tests { #[test] fn test_long_macro() { let version: semver::Version = version!(1, 2, 3 - alpha, 6, 4 + amd64).into(); assert_eq!(version.major, 1); assert_eq!(version.minor, 2); assert_eq!(version.patch, 3); assert_eq!( version.build, vec![semver::Identifier::AlphaNumeric("amd64".to_string())] ); assert_eq!( version, semver::Version::parse("1.2.3-alpha.6.4+amd64").unwrap() ); } #[test] fn test_short_version() { let version: semver::Version = version!(1, 2, 0).into(); assert_eq!(version, semver::Version::parse("1.2.0").unwrap()); } }