adar-macros 0.2.0

This crate contains the macros for the 'adar' crate.
Documentation
mod enum_trait_deref;
mod flags;
mod reflect;
mod state_machine;
mod trait_ref;
use enum_trait_deref::*;
use flags::*;
use proc_macro::TokenStream;
use reflect::*;
use state_machine::*;
use syn::{parse::Nothing, parse_macro_input, DeriveInput, ItemTrait, TypeTraitObject};
use trait_ref::*;

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn FlagEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
    parse_macro_input!(attr as Nothing);
    let input = parse_macro_input!(input as DeriveInput);
    flag_enum_macro_inner(input)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn ReflectEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
    parse_macro_input!(attr as Nothing);
    let input = parse_macro_input!(input as DeriveInput);
    reflect_enum_macro_inner(input)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn EnumTraitDeref(attr: TokenStream, input: TokenStream) -> TokenStream {
    let attr = parse_macro_input!(attr as TypeTraitObject);
    let input = parse_macro_input!(input as DeriveInput);
    enum_trait_deref_macro_inner(attr.into(), input, false)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn EnumTraitDerefMut(attr: TokenStream, input: TokenStream) -> TokenStream {
    let attr = parse_macro_input!(attr as TypeTraitObject);
    let input = parse_macro_input!(input as DeriveInput);
    enum_trait_deref_macro_inner(attr.into(), input, true)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn StateEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
    let attr = parse_macro_input!(attr as StateMachineArgs);
    let input = parse_macro_input!(input as DeriveInput);
    state_enum_macro_inner(attr, input)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}

#[allow(non_snake_case)]
#[proc_macro_attribute]
pub fn TraitRef(attr: TokenStream, input: TokenStream) -> TokenStream {
    parse_macro_input!(attr as Nothing);
    let input = parse_macro_input!(input as ItemTrait);
    trait_ref_macro_inner(input)
        .unwrap_or_else(|err| err.to_compile_error())
        .into()
}