Crates.io | nommy_derive |
lib.rs | nommy_derive |
version | 0.4.1 |
source | src |
created_at | 2021-01-27 13:21:42.415326 |
updated_at | 2021-02-08 09:47:53.742403 |
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(),
},
]
}
);