From 694f455f9d6e802ee51854f0f0fba954376e9e14 Mon Sep 17 00:00:00 2001 From: mootz12 Date: Thu, 26 Mar 2026 08:59:57 -0400 Subject: [PATCH] chore: improve error when single type event used with multiple data entries --- soroban-sdk-macros/src/derive_event.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/soroban-sdk-macros/src/derive_event.rs b/soroban-sdk-macros/src/derive_event.rs index 076741e4d..0146fdabc 100644 --- a/soroban-sdk-macros/src/derive_event.rs +++ b/soroban-sdk-macros/src/derive_event.rs @@ -163,7 +163,7 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result>(); // If errors have occurred, return them. - let errors = errors.checkpoint()?; + let mut errors = errors.checkpoint()?; // Generated code spec. let export = args.export.unwrap_or(true); @@ -266,10 +266,17 @@ fn derive_impls(args: &ContractEventArgs, input: &DeriveInput) -> Result quote! { #path::Val::VOID.to_val() }, - DataFormat::SingleValue => quote! { - use #path::IntoVal; - #(self.#data_idents.into_val(env))* - }, + DataFormat::SingleValue => { + if data_params_count > 1 { + errors.push(Error::custom( + "data_format = \"single-value\" requires exactly 0 or 1 data fields, but found more", + )); + } + quote! { + use #path::IntoVal; + #(self.#data_idents.into_val(env))* + } + } DataFormat::Vec if data_params_count == 0 => quote! { use #path::IntoVal; #path::Vec::<#path::Val>::new(env).into_val(env)