diff --git a/fyrox-core-derive/src/reflect.rs b/fyrox-core-derive/src/reflect.rs index 1e73301d6..8c65ae823 100644 --- a/fyrox-core-derive/src/reflect.rs +++ b/fyrox-core-derive/src/reflect.rs @@ -217,7 +217,11 @@ fn impl_reflect_struct(ty_args: &args::TypeArgs, field_args: &args::Fields) -> T let getter_ref = gen_fields_getter_body(&props, &fields, field_args, false); let getter_mut = gen_fields_getter_body(&props, &field_muts, field_args, true); - let fields_num = field_args.len(); + let fields_num = if ty_args.hide_all { + 0 + } else { + field_args.iter().filter(|a| !a.hidden).count() + }; let set_field_body = self::struct_set_field_body(ty_args); self::gen_impl( @@ -302,6 +306,8 @@ fn impl_reflect_enum(ty_args: &args::TypeArgs, variant_args: &[args::VariantArgs .filter(|(_, f)| !f.hidden) .collect::>(); + let fields_num = if ty_args.hide_all { 0 } else { fields.len() }; + let props = fields .iter() .map(|(i, f)| prop::enum_prop(v, *i, f)) @@ -328,8 +334,6 @@ fn impl_reflect_enum(ty_args: &args::TypeArgs, variant_args: &[args::VariantArgs let getter_ref = gen_fields_getter_body(&props, &fields, &v.fields, false); let getter_mut = gen_fields_getter_body(&props, &field_muts, &v.fields, true); - let fields_num = v.fields.len(); - fields_refs.push(quote! { #matcher => func(&[#metadata_ref]), }); diff --git a/fyrox-core-derive/tests/it/reflect.rs b/fyrox-core-derive/tests/it/reflect.rs index a3bcc87d5..b3c6f42ec 100644 --- a/fyrox-core-derive/tests/it/reflect.rs +++ b/fyrox-core-derive/tests/it/reflect.rs @@ -398,14 +398,18 @@ fn inspect_default() { fn inspect_attributes() { #[derive(Debug, Default, Clone, PartialEq, Reflect)] #[reflect(type_uuid = "e8bb7752-6ff6-4cbb-87fd-e7c10e5ec970")] - pub struct AarGee { - aar: u32, - gee: u32, + struct Foobar { + foo: u32, + bar: u32, } + let foobar = Foobar::default(); + + assert_eq!(foobar.fields_count(), 2); + #[derive(Debug, Default, Clone, PartialEq, Reflect)] #[reflect(type_uuid = "4e0709c6-b89a-47cb-ab06-f19b01b85ec1")] - pub struct Data { + struct Data { // NOTE: Even though this field is skipped, the next field is given index `1` for simplicity #[reflect(hidden)] _skipped: u32, @@ -425,6 +429,8 @@ fn inspect_attributes() { let data = Data::default(); + assert_eq!(data.fields_count(), 2); + let x_metadata = FieldMetadata { name: "x", display_name: "Super X",