Crates.io | switch_statement |
lib.rs | switch_statement |
version | 1.0.0 |
source | src |
created_at | 2020-08-14 17:34:24.605798 |
updated_at | 2020-08-14 21:06:59.244475 |
description | A simple switch statement macro |
homepage | |
repository | https://github.com/camsteffen/switch-statement-rust |
max_upload_size | |
id | 276659 |
size | 5,189 |
A simple macro to emulate a switch
statement in Rust.
The switch!
macro looks similar to match
. But instead of pattern matching,
each left-hand-side expression is interpreted as an expression instead of a
pattern. One use case for this is to match against constants joined with
bitwise OR. The output of the macro is a match
with if
guards.
const A: u32 = 1 << 0;
const B: u32 = 1 << 1;
const C: u32 = 1 << 2;
fn flag_string(input: u32) -> &'static str {
switch! { input;
A => "A",
// bitwise OR
A | B => "A and B",
A | B | C => "A and B and C",
B | C => "B and C",
_ => "other"
}
}
The above code expands to:
const A: u32 = 1 << 0;
const B: u32 = 1 << 1;
const C: u32 = 1 << 2;
fn flag_string(input: u32) -> &'static str {
match input {
v if v == A => "A",
v if v == A | B => "A and B",
v if v == A | B | C => "A and B and C",
v if v == B | C => "B and C",
_ => "other"
}
}