difftreelog
refac: impl_abi_macro
in: master
1 file changed
crates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth4 let name = &ast.ident;4 let name = &ast.ident;5 let docs = extract_docs(&ast.attrs)?;5 let docs = extract_docs(&ast.attrs)?;667 let (is_named_fields, field_names, field_types, field_docs, params_count) = match &ast.data {7 match &ast.data {8 syn::Data::Struct(ds) => match ds.fields {8 syn::Data::Struct(ds) => {9 let (is_named_fields, field_names, field_types, field_docs, params_count) =10 match ds.fields {9 syn::Fields::Named(ref fields) => Ok((11 syn::Fields::Named(ref fields) => Ok((10 true,12 true,20 fields.unnamed.iter().map(map_field_to_doc),22 fields.unnamed.iter().map(map_field_to_doc),21 fields.unnamed.len(),23 fields.unnamed.len(),22 )),24 )),23 syn::Fields::Unit => Err(syn::Error::new(name.span(), "Unit structs not supported")),25 syn::Fields::Unit => {26 Err(syn::Error::new(name.span(), "Unit structs not supported"))27 }24 },28 }?;2930 if params_count == 0 {31 return Err(syn::Error::new(name.span(), "Empty structs not supported"));32 };3334 let tuple_type = tuple_type(field_types.clone());35 let tuple_ref_type = tuple_ref_type(field_types.clone());36 let tuple_data = tuple_data_as_ref(is_named_fields, field_names.clone());37 let tuple_names = tuple_names(is_named_fields, field_names.clone());38 let struct_from_tuple = struct_from_tuple(name, is_named_fields, field_names.clone());3940 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);41 let abi_type = impl_abi_type(name, tuple_type.clone());42 let abi_read = impl_abi_read(name, tuple_type, tuple_names, struct_from_tuple);43 let abi_write = impl_abi_write(name, is_named_fields, tuple_ref_type, tuple_data);44 let solidity_type = impl_solidity_type(name, field_types.clone(), params_count);45 let solidity_type_name =46 impl_solidity_type_name(name, field_types.clone(), params_count);47 let solidity_struct_collect =48 impl_solidity_struct_collect(name, field_names, field_types, field_docs, &docs)?;4950 Ok(quote! {51 #can_be_plcaed_in_vec52 #abi_type53 #abi_read54 #abi_write55 #solidity_type56 #solidity_type_name57 #solidity_struct_collect58 })59 }25 syn::Data::Enum(_) => Err(syn::Error::new(name.span(), "Enums not supported")),60 syn::Data::Enum(_) => Err(syn::Error::new(name.span(), "Enums not supported")),26 syn::Data::Union(_) => Err(syn::Error::new(name.span(), "Unions not supported")),61 syn::Data::Union(_) => Err(syn::Error::new(name.span(), "Unions not supported")),27 }?;62 }2829 if params_count == 0 {30 return Err(syn::Error::new(name.span(), "Empty structs not supported"));31 };3233 let tuple_type = tuple_type(field_types.clone());34 let tuple_ref_type = tuple_ref_type(field_types.clone());35 let tuple_data = tuple_data_as_ref(is_named_fields, field_names.clone());36 let tuple_names = tuple_names(is_named_fields, field_names.clone());37 let struct_from_tuple = struct_from_tuple(name, is_named_fields, field_names.clone());3839 let can_be_plcaed_in_vec = impl_can_be_placed_in_vec(name);40 let abi_type = impl_abi_type(name, tuple_type.clone());41 let abi_read = impl_abi_read(name, tuple_type, tuple_names, struct_from_tuple);42 let abi_write = impl_abi_write(name, is_named_fields, tuple_ref_type, tuple_data);43 let solidity_type = impl_solidity_type(name, field_types.clone(), params_count);44 let solidity_type_name = impl_solidity_type_name(name, field_types.clone(), params_count);45 let solidity_struct_collect =46 impl_solidity_struct_collect(name, field_names, field_types, field_docs, &docs)?;4748 Ok(quote! {49 #can_be_plcaed_in_vec50 #abi_type51 #abi_read52 #abi_write53 #solidity_type54 #solidity_type_name55 #solidity_struct_collect56 })57}63}586459fn tuple_type<'a>(65fn tuple_type<'a>(