@@ -92,12 +92,15 @@ pub fn derive_component(input: TokenStream) -> TokenStream {
92
92
Err ( err) => err. into_compile_error ( ) . into ( ) ,
93
93
} ;
94
94
95
- let map_entities = map_entities (
95
+ let map_entities = match map_entities (
96
96
& ast. data ,
97
97
Ident :: new ( "this" , Span :: call_site ( ) ) ,
98
98
relationship. is_some ( ) ,
99
99
relationship_target. is_some ( ) ,
100
- ) . map ( |map_entities_impl| quote ! {
100
+ ) {
101
+ Ok ( map) => map,
102
+ Err ( err) => return err. into_compile_error ( ) . into ( )
103
+ } . map ( |map_entities_impl| quote ! {
101
104
fn map_entities<M : #bevy_ecs_path:: entity:: EntityMapper >( this: & mut Self , mapper: & mut M ) {
102
105
use #bevy_ecs_path:: entity:: MapEntities ;
103
106
#map_entities_impl
@@ -308,7 +311,7 @@ pub(crate) fn map_entities(
308
311
self_ident : Ident ,
309
312
is_relationship : bool ,
310
313
is_relationship_target : bool ,
311
- ) -> Option < TokenStream2 > {
314
+ ) -> Result < Option < TokenStream2 > > {
312
315
match data {
313
316
Data :: Struct ( DataStruct { fields, .. } ) => {
314
317
let mut map = Vec :: with_capacity ( fields. len ( ) ) ;
@@ -334,16 +337,23 @@ pub(crate) fn map_entities(
334
337
map. push ( quote ! ( #self_ident. #field_member. map_entities( mapper) ; ) ) ;
335
338
} ) ;
336
339
if map. is_empty ( ) {
337
- return None ;
340
+ return Ok ( None ) ;
338
341
} ;
339
- Some ( quote ! (
342
+ Ok ( Some ( quote ! (
340
343
#( #map) *
341
- ) )
344
+ ) ) )
342
345
}
343
346
Data :: Enum ( DataEnum { variants, .. } ) => {
344
347
let mut map = Vec :: with_capacity ( variants. len ( ) ) ;
345
348
346
349
for variant in variants. iter ( ) {
350
+ if let Some ( attr) = variant. attrs . iter ( ) . find ( |a| a. path ( ) . is_ident ( ENTITIES ) ) {
351
+ return Err ( syn:: Error :: new (
352
+ attr. span ( ) ,
353
+ "`#[entities]` should be on the associated type, not on the variant." ,
354
+ ) ) ;
355
+ }
356
+
347
357
let field_members = variant
348
358
. fields
349
359
. iter ( )
@@ -371,17 +381,17 @@ pub(crate) fn map_entities(
371
381
}
372
382
373
383
if map. is_empty ( ) {
374
- return None ;
384
+ return Ok ( None ) ;
375
385
} ;
376
386
377
- Some ( quote ! (
387
+ Ok ( Some ( quote ! (
378
388
match #self_ident {
379
389
#( #map, ) *
380
390
_ => { }
381
391
}
382
- ) )
392
+ ) ) )
383
393
}
384
- Data :: Union ( _) => None ,
394
+ Data :: Union ( _) => Ok ( None ) ,
385
395
}
386
396
}
387
397
0 commit comments