dxc-macros 0.2.0

The Macros of Dxc Crate
Documentation
use crate::classes::ClassListInput;
use crate::props_default::PropsDefaultInput;
use proc_macro::TokenStream;
use proc_macro2::TokenStream as TokenStream2;
use syn::{DeriveInput, parse_macro_input};
mod classes;
mod props;
mod props_default;

#[proc_macro]
pub fn props(input: TokenStream) -> TokenStream {
    props::impl_props(input.into()).into()
}

#[proc_macro]
pub fn classes(input: TokenStream) -> TokenStream {
    let input = syn::parse_macro_input!(input as ClassListInput);
    input.into_token_stream().into()
}

#[proc_macro_derive(PropsDefault, attributes(props_default))]
pub fn props_default_derive(input: TokenStream) -> TokenStream {
    let ast = parse_macro_input!(input as DeriveInput);
    let props_input = PropsDefaultInput::from_derive_input(ast);

    match props_input {
        Ok(input) => {
            let tokens: TokenStream2 = input.into();
            tokens.into()
        }
        Err(err) => TokenStream::from(err.to_compile_error()),
    }
}