extern crate proc_macro;
extern crate proc_macro2;
extern crate syn;
#[macro_use]
extern crate quote;
use proc_macro::TokenStream;
use syn::*;
mod config;
mod endian;
mod enums;
mod gen;
mod meta;
mod parsertree;
mod structs;
use crate::endian::*;
use crate::gen::*;
#[proc_macro_derive(Nom, attributes(nom))]
pub fn nom(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
match gen_impl(&ast, ParserEndianness::Unspecified) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(NomBE, attributes(nom))]
pub fn nom_be(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
match gen_impl(&ast, ParserEndianness::BigEndian) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}
#[proc_macro_derive(NomLE, attributes(nom))]
pub fn nom_le(input: TokenStream) -> TokenStream {
let ast = parse_macro_input!(input as DeriveInput);
match gen_impl(&ast, ParserEndianness::LittleEndian) {
Ok(ts) => ts.into(),
Err(e) => e.to_compile_error().into(),
}
}