@@ -2,7 +2,7 @@ use crate::container_attributes::REFLECT_DEFAULT;
2
2
use crate :: derive_data:: ReflectEnum ;
3
3
use crate :: enum_utility:: { get_variant_constructors, EnumVariantConstructors } ;
4
4
use crate :: field_attributes:: DefaultBehavior ;
5
- use crate :: fq_std:: { FQAny , FQClone , FQDefault , FQOption , FQSend , FQSync } ;
5
+ use crate :: fq_std:: { FQAny , FQClone , FQDefault , FQOption } ;
6
6
use crate :: utility:: { extend_where_clause, ident_or_index, WhereClauseOptions } ;
7
7
use crate :: { ReflectMeta , ReflectStruct } ;
8
8
use proc_macro2:: Span ;
@@ -24,7 +24,7 @@ pub(crate) fn impl_value(meta: &ReflectMeta) -> proc_macro2::TokenStream {
24
24
let bevy_reflect_path = meta. bevy_reflect_path ( ) ;
25
25
let ( impl_generics, ty_generics, where_clause) = type_path. generics ( ) . split_for_impl ( ) ;
26
26
let where_from_reflect_clause =
27
- extend_where_clause ( where_clause, & WhereClauseOptions :: type_path_bounds ( meta) ) ;
27
+ extend_where_clause ( where_clause, & WhereClauseOptions :: new_value ( meta) ) ;
28
28
quote ! {
29
29
impl #impl_generics #bevy_reflect_path:: FromReflect for #type_path #ty_generics #where_from_reflect_clause {
30
30
fn from_reflect( reflect: & dyn #bevy_reflect_path:: Reflect ) -> #FQOption <Self > {
@@ -52,13 +52,19 @@ pub(crate) fn impl_enum(reflect_enum: &ReflectEnum) -> proc_macro2::TokenStream
52
52
// Add FromReflect bound for each active field
53
53
let where_from_reflect_clause = extend_where_clause (
54
54
where_clause,
55
- & WhereClauseOptions {
56
- active_types : reflect_enum. active_types ( ) . into_boxed_slice ( ) ,
57
- ignored_types : reflect_enum. ignored_types ( ) . into_boxed_slice ( ) ,
58
- active_trait_bounds : quote ! ( #bevy_reflect_path:: FromReflect ) ,
59
- ignored_trait_bounds : quote ! ( #FQDefault + #FQAny + #FQSend + #FQSync ) ,
60
- ..WhereClauseOptions :: type_path_bounds ( reflect_enum. meta ( ) )
61
- } ,
55
+ & WhereClauseOptions :: new_with_bounds (
56
+ reflect_enum. meta ( ) ,
57
+ reflect_enum. active_fields ( ) ,
58
+ reflect_enum. ignored_fields ( ) ,
59
+ |field| match & field. attrs . default {
60
+ DefaultBehavior :: Default => Some ( quote ! ( #FQDefault ) ) ,
61
+ _ => None ,
62
+ } ,
63
+ |field| match & field. attrs . default {
64
+ DefaultBehavior :: Func ( _) => None ,
65
+ _ => Some ( quote ! ( #FQDefault ) ) ,
66
+ } ,
67
+ ) ,
62
68
) ;
63
69
64
70
quote ! {
@@ -140,17 +146,25 @@ fn impl_struct_internal(
140
146
// Add FromReflect bound for each active field
141
147
let where_from_reflect_clause = extend_where_clause (
142
148
where_clause,
143
- & WhereClauseOptions {
144
- active_types : reflect_struct. active_types ( ) . into_boxed_slice ( ) ,
145
- ignored_types : reflect_struct. ignored_types ( ) . into_boxed_slice ( ) ,
146
- active_trait_bounds : quote ! ( #bevy_reflect_path:: FromReflect ) ,
147
- ignored_trait_bounds : if is_defaultable {
148
- quote ! ( #FQAny + #FQSend + #FQSync )
149
- } else {
150
- quote ! ( #FQDefault + #FQAny + #FQSend + #FQSync )
149
+ & WhereClauseOptions :: new_with_bounds (
150
+ reflect_struct. meta ( ) ,
151
+ reflect_struct. active_fields ( ) ,
152
+ reflect_struct. ignored_fields ( ) ,
153
+ |field| match & field. attrs . default {
154
+ DefaultBehavior :: Default => Some ( quote ! ( #FQDefault ) ) ,
155
+ _ => None ,
156
+ } ,
157
+ |field| {
158
+ if is_defaultable {
159
+ None
160
+ } else {
161
+ match & field. attrs . default {
162
+ DefaultBehavior :: Func ( _) => None ,
163
+ _ => Some ( quote ! ( #FQDefault ) ) ,
164
+ }
165
+ }
151
166
} ,
152
- ..WhereClauseOptions :: type_path_bounds ( reflect_struct. meta ( ) )
153
- } ,
167
+ ) ,
154
168
) ;
155
169
156
170
quote ! {
0 commit comments