fixed incorrect impl of derived fields_count

This commit is contained in:
Dmitry Stepanov
2026-08-30 11:49:10 +03:00
parent fe33645fd3
commit 0b1694aa71
2 changed files with 17 additions and 7 deletions
+7 -3
View File
@@ -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::<Vec<_>>();
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]),
});
+10 -4
View File
@@ -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",