| Crates.io | nommy_derive |
| lib.rs | nommy_derive |
| version | 0.4.1 |
| created_at | 2021-01-27 13:21:42.415326+00 |
| updated_at | 2021-02-08 09:47:53.742403+00 |
| description | derive(Parse) |
| homepage | |
| repository | https://github.com/conradludgate/nommy |
| max_upload_size | |
| id | 347256 |
| size | 39,876 |
A type based parsing library with convenient macros
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(),
},
]
}
);