Macro if_cfg_api_versions

Source
macro_rules! if_cfg_api_versions {
    ($($k:tt = $v:tt),+ => $a:stmt; $($b:stmt)+) => { ... };
    (
        min = 510, max = 520 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 520 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 600 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 600 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 610 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 610 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 620 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 630 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 510, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 600 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 600 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 610 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 610 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 620 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 630 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 520, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 610 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 610 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 620 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 630 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 600, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 620 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 630 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 610, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620, max = 630 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 620, max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 620, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 620, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 620, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 620, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 630, max = 700 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 630, max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 630, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 630, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 630, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 630, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 630, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 630, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 700, max = 710 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 700, max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 700, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 700, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 700, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 700, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 710, max = 730 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 710, max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 710, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 710, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 730, max = 740 $(, feature = $feature:literal)* => {
        $($then:tt)* } else { $($r#else:tt)* }
    ) => { ... };
    (min = 730, max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 510 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 510 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 520 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 520 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 600 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 600 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 610 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 610 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 620 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 630 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 700 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 710 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 730 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        min = 740 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (min = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 510 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 510 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 520 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 520 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 600 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 600 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 610 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 610 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 620 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 620 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 630 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 630 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 700 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 700 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 710 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 710 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 730 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 730 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (
        max = 740 $(, feature = $feature:literal)* => { $($then:tt)* } else {
        $($r#else:tt)* }
    ) => { ... };
    (max = 740 $(, feature = $feature:literal)* => $($then:tt)*) => { ... };
    (min = $min:tt, max = $max:tt $(, feature = $feature:literal)* => $($t:tt)*) => { ... };
    (min = $min:tt $(, feature = $feature:literal)* => $($t:tt)*) => { ... };
    (max = $max:tt $(, feature = $feature:literal)* => $($t:tt)*) => { ... };
}
Expand description

Similar to cfg_api_versions proc-macro, but as a regular macro. Unlike proc-macros which are unstable on expressions and non-inlined modules, if_cfg_api_versions can be used on these places.

Any feature after the “min” and “max” arguments will be joined in the “any” predicate.

§Constraints:

  • if/else always requires block syntax (i.e., {} around branches).
  • Avoid using multiple items in a single macro call.
  • Best suited for guarding expressions, single items, or blocks.

§Behavior

§Single statement

Guard the statment without additional curly braces

if_cfg_api_versions!(max = 520 => prinln!("foo"));
// expands to:
#[cfg(any(feature = "fdb-5_1", feature = "fdb-5_2"))]
println!("foo");

§Muliple statements

Guard a block wrapping the statments

if_cfg_api_versions!(max = 520 =>
    prinln!("foo");
    prinln!("bar");
);
// expands to:
#[cfg(any(feature = "fdb-5_1", feature = "fdb-5_2"))]
{
    println!("foo");
    println!("bar");
}

§Single Item (e.g., mod, fn, etc.)

Guard the item without additional culry braces

if_cfg_api_versions!(max = 520 => pub mod foo);
// expands to:
#[cfg(any(feature = "fdb-5_1", feature = "fdb-5_2"))]
pub mod foo;

§Multiple Items: NOT RECOMMANDED

Only guard the first item (does not add curly braces since it would be invalid syntax)

if_cfg_api_versions!(max = 520 =>
    pub mod foo;
    pub mod bar;
);
// expands to:
#[cfg(any(feature = "fdb-5_1", feature = "fdb-5_2"))]
pub mod foo;
pub mod bar; // not guarded

§If/Else

Both branches must be wrapped in curly braces, guard the first branch and the second with the opposite condition

let result = if_cfg_api_versions!(max = 520 => {
    println!("5.x");
    true
} else {
    println!("6.0+");
    false
});
// expands to:
let result = {
    #[cfg(any(feature = "fdb-5_1", feature = "fdb-5_2"))]
    {
        println!("5.x");
        true
    }
    #[cfg(not(any(feature = "fdb-5_1", feature = "fdb-5_2")))]
    {
        println!("6.0+");
        false
    }
};