#control-flow #switch #macro #pattern-match

fallthrough

Pattern match with fallthrough, in the style of C switch

3 releases

0.1.2 Jul 21, 2023
0.1.1 Jul 21, 2023
0.1.0 Jul 21, 2023

#1664 in Rust patterns

MIT/Apache

7KB

fallthrough

Build Status API reference Crates.io License

This crate provides a fallthrough macro, which allows performing a pattern match with fallthrough through the arms, in the style of C switch.

use fallthrough::fallthrough;

fn fall(scrutinee: u32) -> u32 {
    let mut ret: u32 = 0;

    fallthrough!(scrutinee,
        val @ (0 | 63..) => ret = val + 7,
        'one: 1 => ret += 8,
        'two: 2 => ret += 9,
        'three: 3 if true => { ret += 10; break 'end },
        'four: 4 => ret = 42,
        'five: 5 => { ret += 1; break 'seven },
        'six: 6 => ret = 3,
        'seven: _ => ret *= 2,
        'end
    );
    ret
}

fn main() {
    assert_eq!(fall(0), 34);
    assert_eq!(fall(1), 27);
    assert_eq!(fall(2), 19);
    assert_eq!(fall(3), 10);
    assert_eq!(fall(4), 86);
    assert_eq!(fall(5), 2);
    assert_eq!(fall(6), 6);
    assert_eq!(fall(7), 0);
    assert_eq!(fall(64), 98);
}

No runtime deps