Skip to content

Commit e089c45

Browse files
Add derive macro, copying directly from derive(Component) macro
1 parent a7122f7 commit e089c45

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

crates/bevy_ecs/macros/src/component.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,24 @@ use proc_macro2::{Span, TokenStream as TokenStream2};
44
use quote::{quote, ToTokens};
55
use syn::{parse_macro_input, parse_quote, DeriveInput, Error, Ident, Path, Result};
66

7+
pub fn derive_resource(input: TokenStream) -> TokenStream {
8+
let mut ast = parse_macro_input!(input as DeriveInput);
9+
let bevy_ecs_path: Path = crate::bevy_ecs_path();
10+
11+
ast.generics
12+
.make_where_clause()
13+
.predicates
14+
.push(parse_quote! { Self: Send + Sync + 'static });
15+
16+
let struct_name = &ast.ident;
17+
let (impl_generics, type_generics, where_clause) = &ast.generics.split_for_impl();
18+
19+
TokenStream::from(quote! {
20+
impl #impl_generics #bevy_ecs_path::component::Resource for #struct_name #type_generics #where_clause {
21+
}
22+
})
23+
}
24+
725
pub fn derive_component(input: TokenStream) -> TokenStream {
826
let mut ast = parse_macro_input!(input as DeriveInput);
927
let bevy_ecs_path: Path = crate::bevy_ecs_path();

crates/bevy_ecs/macros/src/lib.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,11 @@ pub(crate) fn bevy_ecs_path() -> syn::Path {
480480
BevyManifest::default().get_path("bevy_ecs")
481481
}
482482

483+
#[proc_macro_derive(Resource)]
484+
pub fn derive_resource(input: TokenStream) -> TokenStream {
485+
component::derive_resource(input)
486+
}
487+
483488
#[proc_macro_derive(Component, attributes(component))]
484489
pub fn derive_component(input: TokenStream) -> TokenStream {
485490
component::derive_component(input)

0 commit comments

Comments
 (0)