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)?;