nom-derive

License: MIT Apache License 2.0 Build Status

Overview

nom-derive is a custom derive attribute, to derive [nom] parsers automatically from the structure definition.

This is only test code for now. Feedback welcome !

#[derive(Nom)]

This crate exposes a single custom-derive macro Nom which implements parse for the struct it is applied to.

The goal of this project is that:

Usage

Add to your Cargo.toml file::

nom-derive = "0.2" nom = "4.2"

Add #[derive(Nom)] to the structure(s) you want.

See the tests directory for examples.

Example

This implementation:

```rust

[macro_use]

extern crate nom_derive;

[macro_use]

extern crate nom;

use nom::*;

[derive(Nom)]

struct SimpleStruct { pub a: u32, b: u64, } ```

Allows you to generate the [nom] parser for SimpleStruct automatically. The function is called SimpleStruct::parse.

The generated code is equivalent to::

rust impl SimpleStruct { fn parse(i: &[u8]) -> IResult<&[u8],SimpleStruct> { do_parse!( i, a: be_u32 >> b: be_u64 >> ( SimpleStruct{ a,b } ) ) } }

Limitations

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.