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