Skip to content

Commit

Permalink
Re-exports nom macros, so DER macros can be used without importing nom
Browse files Browse the repository at this point in the history
  • Loading branch information
chifflier committed Aug 21, 2019
1 parent 82b4f99 commit 3f896e2
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,5 +111,11 @@ pub mod oid;
pub use ber::parse_ber;
pub use der::parse_der;

// re-exports nom macros, so this crate's macros can be used without importing nom
#[doc(hidden)]
pub use nom::{alt, call, complete, do_parse, many0, map, map_res, verify};
#[doc(hidden)]
pub use rusticata_macros::{custom_check, empty, flat_take};

#[cfg(feature = "bigint")]
extern crate num_bigint;
99 changes: 99 additions & 0 deletions tests/macros.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
#[macro_use]
extern crate der_parser;

use der_parser::ber::{parse_ber_integer, BerObject, BerObjectHeader};
use der_parser::der::{parse_der_enum, parse_der_integer};
use der_parser::error::{BerResult, DerResult};

// Do not import nom, to check types and re-exports

// all following functions are declared to check if macros from
// der-parser can be used without importing nom or rusticata_macros

#[derive(Debug, PartialEq)]
struct MyStruct<'a> {
a: BerObject<'a>,
b: BerObject<'a>,
}

#[allow(dead_code)]
fn parse_seq_m(i: &[u8]) -> DerResult {
parse_der_sequence_defined_m! {
i,
parse_der_integer >>
parse_der_integer
}
}

#[allow(dead_code)]
fn parse_set_m(i: &[u8]) -> DerResult {
parse_der_set_defined_m! {
i,
parse_der_integer >>
parse_der_integer
}
}

#[allow(dead_code)]
fn parse_seq(i: &[u8]) -> DerResult {
parse_der_sequence_defined! {
i,
parse_der_integer >>
parse_der_integer
}
}

#[allow(dead_code)]
fn parse_set(i: &[u8]) -> DerResult {
parse_der_set_defined! {
i,
parse_der_integer >>
parse_der_integer
}
}

#[allow(dead_code)]
fn parse_seq_of_int(i: &[u8]) -> DerResult {
parse_der_sequence_of!(i, parse_der_integer)
}

#[allow(dead_code)]
fn parse_set_of_int(i: &[u8]) -> DerResult {
parse_der_set_of!(i, parse_der_integer)
}

#[allow(dead_code)]
fn parse_optional_enum(i: &[u8]) -> DerResult {
parse_der_optional!(i, parse_der_enum)
}

#[allow(dead_code)]
fn parse_struct01(i: &[u8]) -> BerResult<(BerObjectHeader, MyStruct)> {
parse_der_struct!(
i,
a: parse_ber_integer >> b: parse_ber_integer >> (MyStruct { a: a, b: b })
)
}

#[allow(dead_code)]
fn parse_tagged_int(i: &[u8]) -> BerResult {
parse_der_tagged!(i, EXPLICIT 2, parse_ber_integer)
}

#[derive(Debug, PartialEq)]
struct SimpleStruct {
a: u32,
}

#[allow(dead_code)]
fn parse_app_int(i: &[u8]) -> BerResult<(BerObjectHeader, SimpleStruct)> {
parse_der_application!(
i,
APPLICATION 2,
a: map_res!(parse_ber_integer,|x: BerObject| x.as_u32()) >>
( SimpleStruct{ a } )
)
}

#[test]
fn macros() {}

0 comments on commit 3f896e2

Please sign in to comment.