1use crate::classes::ClassListInput;
2use crate::props_default::PropsDefaultInput;
3use proc_macro::TokenStream;
4use proc_macro2::TokenStream as TokenStream2;
5use syn::{DeriveInput, parse_macro_input};
6mod classes;
7mod props;
8mod props_default;
9
10#[proc_macro]
11pub fn props(input: TokenStream) -> TokenStream {
12 props::impl_props(input.into()).into()
13}
14
15#[proc_macro]
16pub fn classes(input: TokenStream) -> TokenStream {
17 let input = syn::parse_macro_input!(input as ClassListInput);
18 input.into_token_stream().into()
19}
20
21#[proc_macro_derive(PropsDefault, attributes(props_default))]
22pub fn props_default_derive(input: TokenStream) -> TokenStream {
23 let ast = parse_macro_input!(input as DeriveInput);
24 let props_input = PropsDefaultInput::from_derive_input(ast);
25
26 match props_input {
27 Ok(input) => {
28 let tokens: TokenStream2 = input.into();
29 tokens.into()
30 }
31 Err(err) => TokenStream::from(err.to_compile_error()),
32 }
33}