1
+ use bevy_macro_utils:: BevyManifest ;
1
2
use proc_macro2:: { Span , TokenStream } ;
2
3
use quote:: { format_ident, quote} ;
3
4
use syn:: { parse_quote, Data , DeriveInput , Fields , Ident , Path , Type } ;
@@ -8,10 +9,17 @@ pub fn emit(
8
9
mod_name : & ' static str ,
9
10
min_struct_alignment : usize ,
10
11
) -> TokenStream {
12
+ let bevy_prefix_path = BevyManifest :: default ( )
13
+ . maybe_get_path ( crate :: BEVY_RENDER )
14
+ . unwrap_or_else ( || Path {
15
+ leading_colon : None ,
16
+ segments : Default :: default ( ) ,
17
+ } ) ;
18
+
11
19
let mod_name = Ident :: new ( mod_name, Span :: call_site ( ) ) ;
12
20
let trait_name = Ident :: new ( trait_name, Span :: call_site ( ) ) ;
13
21
14
- let mod_path: Path = parse_quote ! ( :: bevy_crevice:: #mod_name) ;
22
+ let mod_path: Path = parse_quote ! ( #bevy_prefix_path :: bevy_crevice:: #mod_name) ;
15
23
let trait_path: Path = parse_quote ! ( #mod_path:: #trait_name) ;
16
24
17
25
let as_trait_name = format_ident ! ( "As{}" , trait_name) ;
@@ -63,7 +71,7 @@ pub fn emit(
63
71
64
72
let field_alignments = fields. iter ( ) . map ( |field| layout_alignment_of_ty ( & field. ty ) ) ;
65
73
let struct_alignment = quote ! {
66
- :: bevy_crevice:: internal:: max_arr( [
74
+ #bevy_prefix_path :: bevy_crevice:: internal:: max_arr( [
67
75
#min_struct_alignment,
68
76
#( #field_alignments, ) *
69
77
] )
@@ -139,13 +147,13 @@ pub fn emit(
139
147
// We set our target alignment to the larger of the
140
148
// alignment due to the previous field and the alignment
141
149
// requirement of the next field.
142
- let alignment = :: bevy_crevice:: internal:: max(
150
+ let alignment = #bevy_prefix_path :: bevy_crevice:: internal:: max(
143
151
#next_field_or_self_alignment,
144
152
min_alignment,
145
153
) ;
146
154
147
155
// Using everything we've got, compute our padding amount.
148
- :: bevy_crevice:: internal:: align_offset( starting_offset, alignment)
156
+ #bevy_prefix_path :: bevy_crevice:: internal:: align_offset( starting_offset, alignment)
149
157
}
150
158
}
151
159
} )
@@ -222,7 +230,7 @@ pub fn emit(
222
230
let size = :: core:: mem:: size_of:: <Self >( ) ;
223
231
let align = <Self as #trait_path>:: ALIGNMENT ;
224
232
225
- let zeroed: Self = :: bevy_crevice:: internal:: bytemuck:: Zeroable :: zeroed( ) ;
233
+ let zeroed: Self = #bevy_prefix_path :: bevy_crevice:: internal:: bytemuck:: Zeroable :: zeroed( ) ;
226
234
227
235
#[ derive( Debug ) ]
228
236
struct Field {
@@ -253,13 +261,13 @@ pub fn emit(
253
261
#pad_fn_impls
254
262
#struct_definition
255
263
256
- unsafe impl #impl_generics :: bevy_crevice:: internal:: bytemuck:: Zeroable for #generated_name #ty_generics #where_clause { }
257
- unsafe impl #impl_generics :: bevy_crevice:: internal:: bytemuck:: Pod for #generated_name #ty_generics #where_clause { }
264
+ unsafe impl #impl_generics #bevy_prefix_path :: bevy_crevice:: internal:: bytemuck:: Zeroable for #generated_name #ty_generics #where_clause { }
265
+ unsafe impl #impl_generics #bevy_prefix_path :: bevy_crevice:: internal:: bytemuck:: Pod for #generated_name #ty_generics #where_clause { }
258
266
259
267
unsafe impl #impl_generics #mod_path:: #trait_name for #generated_name #ty_generics #where_clause {
260
268
const ALIGNMENT : usize = #struct_alignment;
261
269
const PAD_AT_END : bool = true ;
262
- type Padded = #padded_path<Self , { :: bevy_crevice:: internal:: align_offset(
270
+ type Padded = #padded_path<Self , { #bevy_prefix_path :: bevy_crevice:: internal:: align_offset(
263
271
:: core:: mem:: size_of:: <#generated_name>( ) ,
264
272
#struct_alignment
265
273
) } >;
@@ -272,7 +280,7 @@ pub fn emit(
272
280
Self :: Output {
273
281
#generated_struct_field_init
274
282
275
- ..:: bevy_crevice:: internal:: bytemuck:: Zeroable :: zeroed( )
283
+ ..#bevy_prefix_path :: bevy_crevice:: internal:: bytemuck:: Zeroable :: zeroed( )
276
284
}
277
285
}
278
286
0 commit comments