#macro #match #syntax #md

md_match

A macro to support md-match syntax

2 releases

0.1.1 Feb 17, 2023
0.1.0 Feb 17, 2023

#2399 in Rust patterns

MIT license

4KB

md-match

A macro to support md-match.

use md_match::derive::MdMatch;
use md_match::{md_match, MdMatch};

#[derive(MdMatch)]
enum A {
    A1(String),
}

#[derive(MdMatch)]
enum B {
    B1(String),
}

#[test]
fn it_works() {
    let (mut a, mut b) = (A::A1(String::from("hello")), B::B1(String::from("world")));

    let (va_ref, vb_ref) = md_match!(&a, &b => |x, y| (x, y));
    assert_eq!(va_ref, "hello");
    assert_eq!(vb_ref, "world");

    md_match!(&mut a, &mut b => |x, y| {
        *x = String::from("world");
        *y = String::from("hello");
    });

    let (va, vb) = md_match!(a, b => |x, y| (x, y));
    assert_eq!(va, "world");
    assert_eq!(vb, "hello");
}

lib.rs:

md-match

A macro to support md-match.

use md_match::derive::MdMatch;
use md_match::{md_match, MdMatch};

#[derive(MdMatch)]
enum A {
    A1(String),
}

#[derive(MdMatch)]
enum B {
    B1(String),
}

let (mut a, mut b) = (A::A1(String::from("hello")), B::B1(String::from("world")));

let (va_ref, vb_ref) = md_match!(&a, &b => |x, y| (x, y));
assert_eq!(va_ref, "hello");
assert_eq!(vb_ref, "world");

md_match!(&mut a, &mut b => |x, y| {
    *x = String::from("world");
    *y = String::from("hello");
});

let (va, vb) = md_match!(a, b => |x, y| (x, y));
assert_eq!(va, "world");
assert_eq!(vb, "hello");

Dependencies

~1.5MB
~37K SLoC