wecs_derive/
lib.rs

1use proc_macro::{token_stream, TokenStream};
2use quote::{quote, ToTokens};
3use syn::{parse_macro_input, DeriveInput};
4
5#[proc_macro_derive(Component, attributes(r))]
6pub fn component(input: TokenStream) -> TokenStream {
7    let token_stream = parse_macro_input!(input as DeriveInput);
8    let ident = token_stream.ident.clone();
9    let generics = token_stream.generics.clone();
10
11    let impl_tokens = quote! {
12        impl #generics ::wecs::component::Component for #ident #generics {}
13    };
14
15    TokenStream::from(impl_tokens)
16}
17
18#[proc_macro_derive(Resource)]
19pub fn resource(input: TokenStream) -> TokenStream {
20    let token_stream = parse_macro_input!(input as DeriveInput);
21    let ident = token_stream.ident.clone();
22    let generics = token_stream.generics.clone();
23
24    quote! {
25        impl #generics ::wecs::resource::Resource for #ident #generics { }
26    }
27    .into()
28}