--- a/crates/evm-coder/src/abi.rs +++ b/crates/evm-coder/src/abi.rs @@ -328,7 +328,7 @@ } } -macro_rules! impl_tuples { +macro_rules! impl_tuples_abi_reader { ($($ident:ident)+) => { impl<$($ident),+> sealed::CanBePlacedInVec for ($($ident,)+) {} impl<$($ident),+> AbiRead<($($ident,)+)> for AbiReader<'_> @@ -345,16 +345,16 @@ }; } -impl_tuples! {A} -impl_tuples! {A B} -impl_tuples! {A B C} -impl_tuples! {A B C D} -impl_tuples! {A B C D E} -impl_tuples! {A B C D E F} -impl_tuples! {A B C D E F G} -impl_tuples! {A B C D E F G H} -impl_tuples! {A B C D E F G H I} -impl_tuples! {A B C D E F G H I J} +impl_tuples_abi_reader! {A} +impl_tuples_abi_reader! {A B} +impl_tuples_abi_reader! {A B C} +impl_tuples_abi_reader! {A B C D} +impl_tuples_abi_reader! {A B C D E} +impl_tuples_abi_reader! {A B C D E F} +impl_tuples_abi_reader! {A B C D E F G} +impl_tuples_abi_reader! {A B C D E F G H} +impl_tuples_abi_reader! {A B C D E F G H I} +impl_tuples_abi_reader! {A B C D E F G H I J} pub trait AbiWrite { fn abi_write(&self, writer: &mut AbiWriter); @@ -422,6 +422,32 @@ fn abi_write(&self, _writer: &mut AbiWriter) {} } +macro_rules! impl_tuples_abi_writer { + ($($ident:ident)+) => { + #[allow(non_snake_case)] + impl<$($ident),+> AbiWrite for &($($ident,)+) + where + $($ident: AbiWrite,)+ + { + fn abi_write(&self, writer: &mut AbiWriter) { + let ($($ident,)+) = self; + $($ident.abi_write(writer);)+ + } + } + }; +} + +impl_tuples_abi_writer! {A} +impl_tuples_abi_writer! {A B} +impl_tuples_abi_writer! {A B C} +impl_tuples_abi_writer! {A B C D} +impl_tuples_abi_writer! {A B C D E} +impl_tuples_abi_writer! {A B C D E F} +impl_tuples_abi_writer! {A B C D E F G} +impl_tuples_abi_writer! {A B C D E F G H} +impl_tuples_abi_writer! {A B C D E F G H I} +impl_tuples_abi_writer! {A B C D E F G H I J} + #[macro_export] macro_rules! abi_decode { ($reader:expr, $($name:ident: $typ:ident),+ $(,)?) => {