1 use syn::{parse_macro_input, DeriveInput, Error};
2 
3 mod bindgen;
4 mod component;
5 
6 #[proc_macro_derive(Lift, attributes(component))]
7 pub fn lift(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
8     component::expand(
9         &component::LiftExpander,
10         &parse_macro_input!(input as DeriveInput),
11     )
12     .unwrap_or_else(Error::into_compile_error)
13     .into()
14 }
15 
16 #[proc_macro_derive(Lower, attributes(component))]
17 pub fn lower(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
18     component::expand(
19         &component::LowerExpander,
20         &parse_macro_input!(input as DeriveInput),
21     )
22     .unwrap_or_else(Error::into_compile_error)
23     .into()
24 }
25 
26 #[proc_macro_derive(ComponentType, attributes(component))]
27 pub fn component_type(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
28     component::expand(
29         &component::ComponentTypeExpander,
30         &parse_macro_input!(input as DeriveInput),
31     )
32     .unwrap_or_else(Error::into_compile_error)
33     .into()
34 }
35 
36 #[proc_macro]
37 pub fn flags(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
38     component::expand_flags(&parse_macro_input!(input as component::Flags))
39         .unwrap_or_else(Error::into_compile_error)
40         .into()
41 }
42 
43 #[proc_macro]
44 pub fn bindgen(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
45     bindgen::expand(&parse_macro_input!(input as bindgen::Config))
46         .unwrap_or_else(Error::into_compile_error)
47         .into()
48 }
49