Macro core::cfg_match

source ·
macro_rules! cfg_match {
    (
        $(cfg($initial_meta:meta) => { $($initial_tokens:item)* })+
        _ => { $($extra_tokens:item)* }
    ) => { ... };
    (
        $(cfg($extra_meta:meta) => { $($extra_tokens:item)* })*
    ) => { ... };
    (@__items ($($_:meta,)*);) => { ... };
    (
        @__items ($($no:meta,)*);
        (($($yes:meta)?) ($($tokens:item)*)),
        $($rest:tt,)*
    ) => { ... };
    (@__identity $($tokens:item)*) => { ... };
}
🔬This is a nightly-only experimental API. (cfg_match #115585)
Expand description

A macro for defining #[cfg] match-like statements.

It is similar to the if/elif C preprocessor macro by allowing definition of a cascade of #[cfg] cases, emitting the implementation which matches first.

This allows you to conveniently provide a long list #[cfg]’d blocks of code without having to rewrite each clause multiple times.

Trailing _ wildcard match arms are optional and they indicate a fallback branch when all previous declarations do not evaluate to true.

Example

#![feature(cfg_match)]

cfg_match! {
    cfg(unix) => {
        fn foo() { /* unix specific functionality */ }
    }
    cfg(target_pointer_width = "32") => {
        fn foo() { /* non-unix, 32-bit functionality */ }
    }
    _ => {
        fn foo() { /* fallback implementation */ }
    }
}
Run