From 013d364fdae29bb35d0761270e4b417d55e3a848 Mon Sep 17 00:00:00 2001 From: quininer Date: Thu, 28 May 2026 15:54:13 +0800 Subject: [PATCH] fix(encoding): Fix incorrect items count --- crates/ast_node/src/encoding/decode.rs | 8 ++++++-- crates/ast_node/src/encoding/encode.rs | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/crates/ast_node/src/encoding/decode.rs b/crates/ast_node/src/encoding/decode.rs index e67ee3022d90..61b404bac36f 100644 --- a/crates/ast_node/src/encoding/decode.rs +++ b/crates/ast_node/src/encoding/decode.rs @@ -40,7 +40,11 @@ pub fn expand(DeriveInput { ident, data, .. }: DeriveInput) -> syn::ItemImpl { syn::parse_quote! { #ident ( #(#names),* ) } }; - let count = data.fields.len(); + let count = data + .fields + .iter() + .filter(|field| !is_ignore(&field.attrs)) + .count(); let head: Option = (count != 1).then(|| { syn::parse_quote! { let len = >::len(reader)?.unwrap(); @@ -193,7 +197,7 @@ pub fn expand(DeriveInput { ident, data, .. }: DeriveInput) -> syn::ItemImpl { } }) .collect::>(); - let count = field.fields.len(); + let count = names.len(); let stmt = field.fields.iter() .zip(names.iter()) diff --git a/crates/ast_node/src/encoding/encode.rs b/crates/ast_node/src/encoding/encode.rs index e4485f743c2f..107f69982283 100644 --- a/crates/ast_node/src/encoding/encode.rs +++ b/crates/ast_node/src/encoding/encode.rs @@ -28,8 +28,9 @@ pub fn expand(DeriveInput { ident, data, .. }: DeriveInput) -> syn::ItemImpl { cbor4ii::core::enc::Encode::encode(&#fieldpath, writer)?; }, } - }); - let count = data.fields.len(); + }) + .collect::>(); + let count = fields.len(); let head: Option = (count != 1).then(|| { syn::parse_quote! { >::bounded(#count, writer)?;