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}