Skip to main content

adar_macros/
lib.rs

1mod enum_trait_deref;
2mod flags;
3mod reflect;
4mod state_machine;
5mod trait_ref;
6use enum_trait_deref::*;
7use flags::*;
8use proc_macro::TokenStream;
9use reflect::*;
10use state_machine::*;
11use syn::{parse::Nothing, parse_macro_input, DeriveInput, ItemTrait, TypeTraitObject};
12use trait_ref::*;
13
14#[allow(non_snake_case)]
15#[proc_macro_attribute]
16pub fn FlagEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
17    parse_macro_input!(attr as Nothing);
18    let input = parse_macro_input!(input as DeriveInput);
19    flag_enum_macro_inner(input)
20        .unwrap_or_else(|err| err.to_compile_error())
21        .into()
22}
23
24#[allow(non_snake_case)]
25#[proc_macro_attribute]
26pub fn ReflectEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
27    parse_macro_input!(attr as Nothing);
28    let input = parse_macro_input!(input as DeriveInput);
29    reflect_enum_macro_inner(input)
30        .unwrap_or_else(|err| err.to_compile_error())
31        .into()
32}
33
34#[allow(non_snake_case)]
35#[proc_macro_attribute]
36pub fn EnumTraitDeref(attr: TokenStream, input: TokenStream) -> TokenStream {
37    let attr = parse_macro_input!(attr as TypeTraitObject);
38    let input = parse_macro_input!(input as DeriveInput);
39    enum_trait_deref_macro_inner(attr.into(), input, false)
40        .unwrap_or_else(|err| err.to_compile_error())
41        .into()
42}
43
44#[allow(non_snake_case)]
45#[proc_macro_attribute]
46pub fn EnumTraitDerefMut(attr: TokenStream, input: TokenStream) -> TokenStream {
47    let attr = parse_macro_input!(attr as TypeTraitObject);
48    let input = parse_macro_input!(input as DeriveInput);
49    enum_trait_deref_macro_inner(attr.into(), input, true)
50        .unwrap_or_else(|err| err.to_compile_error())
51        .into()
52}
53
54#[allow(non_snake_case)]
55#[proc_macro_attribute]
56pub fn StateEnum(attr: TokenStream, input: TokenStream) -> TokenStream {
57    let attr = parse_macro_input!(attr as StateMachineArgs);
58    let input = parse_macro_input!(input as DeriveInput);
59    state_enum_macro_inner(attr, input)
60        .unwrap_or_else(|err| err.to_compile_error())
61        .into()
62}
63
64#[allow(non_snake_case)]
65#[proc_macro_attribute]
66pub fn TraitRef(attr: TokenStream, input: TokenStream) -> TokenStream {
67    parse_macro_input!(attr as Nothing);
68    let input = parse_macro_input!(input as ItemTrait);
69    trait_ref_macro_inner(input)
70        .unwrap_or_else(|err| err.to_compile_error())
71        .into()
72}