Skip to main content

dxc_macros/
lib.rs

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}