#pattern-match #pattern #match #macro

bind_match

Convenience macro similar to matches! but binds to variables in the pattern and returns an Option of the result

3 releases

0.1.2 Jan 6, 2021
0.1.1 Jan 6, 2021
0.1.0 Jan 3, 2021

#2430 in Rust patterns

Download history 69/week @ 2024-07-20 95/week @ 2024-07-27 103/week @ 2024-08-03 126/week @ 2024-08-10 89/week @ 2024-08-17 91/week @ 2024-08-24 99/week @ 2024-08-31 87/week @ 2024-09-07 67/week @ 2024-09-14 138/week @ 2024-09-21 82/week @ 2024-09-28 39/week @ 2024-10-05 60/week @ 2024-10-12 57/week @ 2024-10-19 55/week @ 2024-10-26 69/week @ 2024-11-02

245 downloads per month
Used in 3 crates (via narui_macros)

MIT license

5KB

bind_match

Convenience macro similar to matches! but lets you bind to and pattern and return an Option of the result.

The input of the macro looks like this:

bind_match!(input_expr, pattern => binding_expr)

Or with pattern guards:

bind_match!(input_expr, pattern if guard => binding_expr)

The binding_expr is returned, with variables bound in the pattern.

Example

This can be particularly useful when matching inside iterator adapters.

use bind_match::bind_match;

enum Foo {
    A(Option<i32>, bool),
    B { open: bool, closed: bool },
}
struct Bar {
    foo: Foo,
    fun: bool,
}

fn fun_when_open(bars: impl IntoIterator<Item = Bar>) -> Option<bool> {
    bars.into_iter()
        .filter_map(|bar| bind_match!(bar, Bar { foo: Foo::B { open, .. }, fun } if open => fun ))
        .next()
}

No runtime deps