7个不稳定版本 (3个破坏性更新)
0.4.1 | 2021年2月8日 |
---|---|
0.4.0 | 2021年2月7日 |
0.3.0 | 2021年2月7日 |
0.2.1 | 2021年2月2日 |
0.1.1 | 2021年1月28日 |
#12 in #named-fields
每月22次下载
用于 nommy
40KB
1K SLoC
nommy
一个基于类型的解析库,带有方便的宏
use nommy::{parse, text::*, Parse};
type Letters = AnyOf1<"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ">;
#[derive(Debug, Parse, PartialEq)]
#[nommy(prefix = Tag<"struct">)]
#[nommy(ignore = WhiteSpace)]
struct StructNamed {
#[nommy(parser = Letters)]
name: String,
#[nommy(prefix = Tag<"{">, suffix = Tag<"}">)]
fields: Vec<NamedField>,
}
#[derive(Debug, Parse, PartialEq)]
#[nommy(suffix = Tag<",">)]
#[nommy(ignore = WhiteSpace)]
struct NamedField {
#[nommy(parser = Letters)]
name: String,
#[nommy(prefix = Tag<":">, parser = Letters)]
ty: String,
}
let input = "struct Foo {
bar: Abc,
baz: Xyz,
}";
let struct_: StructNamed = parse(input.chars()).unwrap();
assert_eq!(
struct_,
StructNamed {
name: "Foo".to_string(),
fields: vec![
NamedField {
name: "bar".to_string(),
ty: "Abc".to_string(),
},
NamedField {
name: "baz".to_string(),
ty: "Xyz".to_string(),
},
]
}
);
依赖
~1.5MB
~35K SLoC