nom-derive

License: MIT Apache License 2.0 Build Status Crates.io Version

Overview

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

It is not meant to replace [nom], but to provide a quick and easy way to generate parsers for structures, especially for simple structures. This crate aims at simplifying common cases. In some cases, writing the parser manually will remain more efficient.

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:

Changes

0.5.0

0.4.0

0.3.0

Usage

Add to your Cargo.toml file::

nom-derive = "0.3" 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 } ) ) } }

See the API documentation for more examples.

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.