macro_rules! switch {
({ $($tt:tt)* }) => { ... };
(_ => { $($output:tt)* }) => { ... };
(
$cond:path => $output:tt
$($( $rest:tt )+)?
) => { ... };
(
#[cfg($cfg:meta)] => $output:tt
$($( $rest:tt )+)?
) => { ... };
}
Expand description
Provides a match
-like expression similar to cfg_if
and based on the experimental
cfg_match
.
The name switch
is used to avoid conflict with the match
keyword.
Arms are evaluated top to bottom, and an optional wildcard arm can be provided if no match
can be made.
An arm can either be:
- a
cfg(...)
pattern (e.g.,feature = "foo"
) - a wildcard
_
- an alias defined using
define_alias
Common aliases are provided by cfg
.
Note that aliases are evaluated from the context of the defining crate, not the consumer.
ยงExamples
cfg::switch! {
#[cfg(feature = "foo")] => {
foo("We have the `foo` feature!")
}
cfg::std => {
extern crate std;
std::println!("No `foo`, but we have `std`!");
}
_ => {
log("Don't have `std` or `foo`");
}
}