Crates.io | nommy |
lib.rs | nommy |
version | 0.4.1 |
source | src |
created_at | 2021-01-27 13:22:00.585063 |
updated_at | 2021-02-08 09:48:31.762735 |
description | Type based parser |
homepage | |
repository | https://github.com/conradludgate/nommy |
max_upload_size | |
id | 347257 |
size | 40,377 |
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(),
},
]
}
);