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}