switch_statement

Crates.ioswitch_statement
lib.rsswitch_statement
version1.0.0
sourcesrc
created_at2020-08-14 17:34:24.605798
updated_at2020-08-14 21:06:59.244475
descriptionA simple switch statement macro
homepage
repositoryhttps://github.com/camsteffen/switch-statement-rust
max_upload_size
id276659
size5,189
Cameron Steffen (camsteffen)

documentation

README

Switch Statement For Rust

A simple macro to emulate a switch statement in Rust.

crates.io Docs License

Description

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.

Example

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"
    }
}
Commit count: 6

cargo fmt