@@ -424,43 +424,62 @@ pub fn derive_world_query(input: TokenStream) -> TokenStream {
424424#[ proc_macro_derive( SystemLabel ) ]
425425pub fn derive_system_label ( input : TokenStream ) -> TokenStream {
426426 let input = parse_macro_input ! ( input as DeriveInput ) ;
427- let mut trait_path = bevy_ecs_path ( ) ;
428- trait_path. segments . push ( format_ident ! ( "schedule" ) . into ( ) ) ;
429- trait_path
430- . segments
431- . push ( format_ident ! ( "SystemLabel" ) . into ( ) ) ;
432- derive_label ( input, & trait_path)
427+ let LabelPaths {
428+ trait_path,
429+ boxed_type_path,
430+ } = label_paths ( "SystemLabel" ) ;
431+ derive_label ( input, & trait_path, & boxed_type_path)
433432}
434433
435434#[ proc_macro_derive( StageLabel ) ]
436435pub fn derive_stage_label ( input : TokenStream ) -> TokenStream {
437436 let input = parse_macro_input ! ( input as DeriveInput ) ;
438- let mut trait_path = bevy_ecs_path ( ) ;
439- trait_path. segments . push ( format_ident ! ( "schedule" ) . into ( ) ) ;
440- trait_path. segments . push ( format_ident ! ( "StageLabel" ) . into ( ) ) ;
441- derive_label ( input, & trait_path)
437+ let LabelPaths {
438+ trait_path,
439+ boxed_type_path,
440+ } = label_paths ( "StageLabel" ) ;
441+ derive_label ( input, & trait_path, & boxed_type_path)
442442}
443443
444444#[ proc_macro_derive( AmbiguitySetLabel ) ]
445445pub fn derive_ambiguity_set_label ( input : TokenStream ) -> TokenStream {
446446 let input = parse_macro_input ! ( input as DeriveInput ) ;
447- let mut trait_path = bevy_ecs_path ( ) ;
448- trait_path. segments . push ( format_ident ! ( "schedule" ) . into ( ) ) ;
449- trait_path
450- . segments
451- . push ( format_ident ! ( "AmbiguitySetLabel" ) . into ( ) ) ;
452- derive_label ( input, & trait_path)
447+ let LabelPaths {
448+ trait_path,
449+ boxed_type_path,
450+ } = label_paths ( "AmbiguitySetLabel" ) ;
451+ derive_label ( input, & trait_path, & boxed_type_path)
453452}
454453
455454#[ proc_macro_derive( RunCriteriaLabel ) ]
456455pub fn derive_run_criteria_label ( input : TokenStream ) -> TokenStream {
457456 let input = parse_macro_input ! ( input as DeriveInput ) ;
457+ let LabelPaths {
458+ trait_path,
459+ boxed_type_path,
460+ } = label_paths ( "RunCriteriaLabel" ) ;
461+ derive_label ( input, & trait_path, & boxed_type_path)
462+ }
463+
464+ struct LabelPaths {
465+ trait_path : syn:: Path ,
466+ boxed_type_path : syn:: Path ,
467+ }
468+
469+ fn label_paths ( label_trait_name : & ' static str ) -> LabelPaths {
458470 let mut trait_path = bevy_ecs_path ( ) ;
459471 trait_path. segments . push ( format_ident ! ( "schedule" ) . into ( ) ) ;
472+ let mut boxed_type_path = trait_path. clone ( ) ;
460473 trait_path
461474 . segments
462- . push ( format_ident ! ( "RunCriteriaLabel" ) . into ( ) ) ;
463- derive_label ( input, & trait_path)
475+ . push ( format_ident ! ( "{}" , label_trait_name) . into ( ) ) ;
476+ boxed_type_path
477+ . segments
478+ . push ( format_ident ! ( "Boxed{}" , label_trait_name) . into ( ) ) ;
479+ LabelPaths {
480+ trait_path,
481+ boxed_type_path,
482+ }
464483}
465484
466485pub ( crate ) fn bevy_ecs_path ( ) -> syn:: Path {
0 commit comments