difftreelog
feat add FIELDS_COUNT const in AbiType trait
in: master
6 files changed
crates/evm-coder/procedural/src/abi_derive/derive_enum.rsdiffbeforeafterboth47 )47 )48}48}494950pub fn impl_enum_abi_type(name: &syn::Ident) -> proc_macro2::TokenStream {50pub fn impl_enum_abi_type(name: &syn::Ident, option_count: usize) -> proc_macro2::TokenStream {51 quote! {51 quote! {52 impl ::evm_coder::abi::AbiType for #name {52 impl ::evm_coder::abi::AbiType for #name {53 const SIGNATURE: ::evm_coder::custom_signature::SignatureUnit = <u8 as ::evm_coder::abi::AbiType>::SIGNATURE;53 const SIGNATURE: ::evm_coder::custom_signature::SignatureUnit = <u8 as ::evm_coder::abi::AbiType>::SIGNATURE;54 const FIELDS_COUNT: usize = #option_count;545555 fn is_dynamic() -> bool {56 fn is_dynamic() -> bool {56 <u8 as ::evm_coder::abi::AbiType>::is_dynamic()57 <u8 as ::evm_coder::abi::AbiType>::is_dynamic()crates/evm-coder/procedural/src/abi_derive/derive_struct.rsdiffbeforeafterboth100pub fn impl_struct_abi_type(100pub fn impl_struct_abi_type(101 name: &syn::Ident,101 name: &syn::Ident,102 tuple_type: proc_macro2::TokenStream,102 tuple_type: proc_macro2::TokenStream,103 fields_count: usize,103) -> proc_macro2::TokenStream {104) -> proc_macro2::TokenStream {104 quote! {105 quote! {105 impl ::evm_coder::abi::AbiType for #name {106 impl ::evm_coder::abi::AbiType for #name {106 const SIGNATURE: ::evm_coder::custom_signature::SignatureUnit = <#tuple_type as ::evm_coder::abi::AbiType>::SIGNATURE;107 const SIGNATURE: ::evm_coder::custom_signature::SignatureUnit = <#tuple_type as ::evm_coder::abi::AbiType>::SIGNATURE;108 const FIELDS_COUNT: usize = #fields_count;107 fn is_dynamic() -> bool {109 fn is_dynamic() -> bool {108 <#tuple_type as ::evm_coder::abi::AbiType>::is_dynamic()110 <#tuple_type as ::evm_coder::abi::AbiType>::is_dynamic()109 }111 }crates/evm-coder/procedural/src/abi_derive/mod.rsdiffbeforeafterboth49 let struct_from_tuple = struct_from_tuple(name, is_named_fields, field_names.clone());49 let struct_from_tuple = struct_from_tuple(name, is_named_fields, field_names.clone());505051 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);51 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);52 let abi_type = impl_struct_abi_type(name, tuple_type.clone());52 let abi_type = impl_struct_abi_type(name, tuple_type.clone(), params_count);53 let abi_read = impl_struct_abi_read(name, tuple_type, tuple_names, struct_from_tuple);53 let abi_read = impl_struct_abi_read(name, tuple_type, tuple_names, struct_from_tuple);54 let abi_write = impl_struct_abi_write(name, is_named_fields, tuple_ref_type, tuple_data);54 let abi_write = impl_struct_abi_write(name, is_named_fields, tuple_ref_type, tuple_data);55 let solidity_type = impl_struct_solidity_type(name, field_types.clone(), params_count);55 let solidity_type = impl_struct_solidity_type(name, field_types.clone(), params_count);83 let from = impl_enum_from_u8(name, enum_options.clone());83 let from = impl_enum_from_u8(name, enum_options.clone());84 let solidity_option = impl_solidity_option(name, enum_options.clone());84 let solidity_option = impl_solidity_option(name, enum_options.clone());85 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);85 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);86 let abi_type = impl_enum_abi_type(name);86 let abi_type = impl_enum_abi_type(name, option_count);87 let abi_read = impl_enum_abi_read(name);87 let abi_read = impl_enum_abi_read(name);88 let abi_write = impl_enum_abi_write(name);88 let abi_write = impl_enum_abi_write(name);89 let solidity_type_name = impl_enum_solidity_type_name(name);89 let solidity_type_name = impl_enum_solidity_type_name(name);crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth161617 impl AbiType for $ty {17 impl AbiType for $ty {18 const SIGNATURE: SignatureUnit = make_signature!(new fixed(stringify!($name)));18 const SIGNATURE: SignatureUnit = make_signature!(new fixed(stringify!($name)));19 const FIELDS_COUNT: usize = 1;192020 fn is_dynamic() -> bool {21 fn is_dynamic() -> bool {21 $dynamic22 $dynamic969797impl<T: AbiType> AbiType for &T {98impl<T: AbiType> AbiType for &T {98 const SIGNATURE: SignatureUnit = T::SIGNATURE;99 const SIGNATURE: SignatureUnit = T::SIGNATURE;100 const FIELDS_COUNT: usize = T::FIELDS_COUNT;99101100 fn is_dynamic() -> bool {102 fn is_dynamic() -> bool {101 T::is_dynamic()103 T::is_dynamic()125127126impl<T: AbiType> AbiType for Vec<T> {128impl<T: AbiType> AbiType for Vec<T> {127 const SIGNATURE: SignatureUnit = make_signature!(new nameof(T::SIGNATURE) fixed("[]"));129 const SIGNATURE: SignatureUnit = make_signature!(new nameof(T::SIGNATURE) fixed("[]"));130 const FIELDS_COUNT: usize = 1;128131129 fn is_dynamic() -> bool {132 fn is_dynamic() -> bool {130 true133 true139142140impl AbiType for Property {143impl AbiType for Property {141 const SIGNATURE: SignatureUnit = make_signature!(new fixed("(string,bytes)"));144 const SIGNATURE: SignatureUnit = make_signature!(new fixed("(string,bytes)"));145 const FIELDS_COUNT: usize = 2;142146143 fn is_dynamic() -> bool {147 fn is_dynamic() -> bool {144 string::is_dynamic() || bytes::is_dynamic()148 string::is_dynamic() || bytes::is_dynamic()230 shift_left(1)234 shift_left(1)231 fixed(")")235 fixed(")")232 );236 );237 const FIELDS_COUNT: usize = 0 $(+ {let _ = <$ident as AbiType>::FIELDS_COUNT; 1})+;233238234 fn is_dynamic() -> bool {239 fn is_dynamic() -> bool {235 false240 falsecrates/evm-coder/src/abi/traits.rsdiffbeforeafterboth10 /// Signature for Etherium ABI.10 /// Signature for Etherium ABI.11 const SIGNATURE: SignatureUnit;11 const SIGNATURE: SignatureUnit;1213 /// Count of enum variants or struct fields.14 const FIELDS_COUNT: usize;121513 /// Signature as str.16 /// Signature as str.14 fn as_str() -> &'static str {17 fn as_str() -> &'static str {crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth163 );163 );164 }164 }165166 #[test]167 fn impl_abi_type_fields_count() {168 assert_eq!(169 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::FIELDS_COUNT,170 1171 );172 assert_eq!(173 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::FIELDS_COUNT,174 1175 );176 assert_eq!(177 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::FIELDS_COUNT,178 2179 );180 assert_eq!(181 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::FIELDS_COUNT,182 2183 );184 assert_eq!(185 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::FIELDS_COUNT,186 2187 );188 assert_eq!(189 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::FIELDS_COUNT,190 1191 );192 assert_eq!(193 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::FIELDS_COUNT,194 2195 );196 assert_eq!(197 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::FIELDS_COUNT,198 2199 );200 assert_eq!(201 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::FIELDS_COUNT,202 2203 );204 assert_eq!(205 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::FIELDS_COUNT,206 3207 );208 }165209166 #[test]210 #[test]167 fn impl_abi_type_is_dynamic() {211 fn impl_abi_type_is_dynamic() {