3 个版本
0.1.2 | 2022年6月14日 |
---|---|
0.1.1 | 2022年6月14日 |
0.1.0 | 2022年6月14日 |
#304 in 解析器工具
9KB
200 行
rematch
一个基于正则表达式匹配生成简单 FromStr 实现的过程宏
示例
枚举使用
use rematch::rematch;
#[derive(Debug, PartialEq, Eq)]
#[rematch]
enum Test {
#[rematch(r"a")]
A,
#[rematch(r"b (\d+)")]
B(usize),
#[rematch(r"c = (\d+)")]
C { x: usize },
}
assert_eq!("a".parse::<Test>().unwrap(), Test::A);
assert_eq!("b 42".parse::<Test>().unwrap(), Test::B(42));
assert_eq!("c = 123".parse::<Test>().unwrap(), Test::C { x: 123 });
结构体使用
use rematch::rematch;
#[derive(Debug, PartialEq, Eq)]
#[rematch(r"a number (\d+) with some string ([abc]+)")]
struct Test {
a: usize,
s: String,
}
assert_eq!(
"a number 42 with some string cabab"
.parse::<Test>()
.unwrap(),
Test {
a: 42,
s: "cabab".to_owned(),
}
);
依赖项
~3.5–5MB
~92K SLoC