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
}
};