#variables #pattern #macro #scope #assert #let #replace

dev assert_matches2

A version of the assert_matches! macro that brings variables from the pattern into scope

3 releases

0.1.2 Nov 1, 2023
0.1.1 Oct 23, 2023
0.1.0 Jun 7, 2023

#312 in Rust patterns

Download history 424/week @ 2024-01-04 387/week @ 2024-01-11 506/week @ 2024-01-18 395/week @ 2024-01-25 199/week @ 2024-02-01 560/week @ 2024-02-08 199/week @ 2024-02-15 231/week @ 2024-02-22 275/week @ 2024-02-29 354/week @ 2024-03-07 531/week @ 2024-03-14 669/week @ 2024-03-21 418/week @ 2024-03-28 262/week @ 2024-04-04 419/week @ 2024-04-11 387/week @ 2024-04-18

1,525 downloads per month
Used in 13 crates (12 directly)

MPL-2.0 license

8KB

assert_matches2

A replacement for the assert_matches crate, providing an assert_matches! macro without support for if guards and the extra arm, but bringing any names introduced in the pattern into scope for after the macro invocation, by expanding to let else.

Example

use assert_matches2::assert_matches;

/// Basic usage
let var = serde_json::Value::from("a string");
assert_matches!(var, serde_json::Value::String(s));
assert_eq!(s, "a string");

// More complex usages
#[derive(Debug)]
struct Foo {
    bar: Bar,
}

#[derive(Debug)]
enum Bar {
    V1(u8),
    V2 { field: String },
}

let var = Foo { bar: Bar::V1(10) };
assert_matches!(var, Foo { bar: ref r @ Bar::V1(int) });
assert_matches!(r, Bar::V1(_));
assert_eq!(int, 10);

let var = Foo { bar: Bar::V2 { field: "test".to_owned() } };
assert_matches!(var, Foo { bar: Bar::V2 { field: rename } });
assert_eq!(rename, "test");

No runtime deps