git.delta.rocks / unique-network / refs/commits / 65f1baca6fcb

difftreelog

fix add tuple support in solidity_interface

Trubnikov Sergey2022-10-24parent: #cc1948f.patch.diff
in: master

1 file changed

modifiedcrates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth
843843
844 fn expand_type(ty: &AbiType, token_stream: &mut proc_macro2::TokenStream) {844 fn expand_type(
845 ty: &AbiType,
846 token_stream: &mut proc_macro2::TokenStream,
847 read_signature: bool,
848 ) {
845 match ty {849 match ty {
846 AbiType::Plain(ref ident) => {850 AbiType::Plain(ref ident) => token_stream.extend(if read_signature {
847 token_stream.extend(quote! {851 quote! {
848 (<#ident>::SIGNATURE),852 (<#ident>::SIGNATURE),
849 });853 }
850 }854 } else {
855 quote! {
856 #ident,
857 }
858 }),
851859
852 AbiType::Tuple(ref tuple_type) => {860 AbiType::Tuple(ref tuple_type) => {
853 let mut tuple_types = proc_macro2::TokenStream::new();861 let mut tuple_types = proc_macro2::TokenStream::new();
854 for ty in tuple_type {862 for ty in tuple_type {
855 Self::expand_type(ty, &mut tuple_types);863 Self::expand_type(ty, &mut tuple_types, false);
856 }864 }
857 let group =865 tuple_types = quote! { (<(#tuple_types)>::SIGNATURE), };
858 proc_macro2::Group::new(proc_macro2::Delimiter::Parenthesis, tuple_types);866 // println!("{}", tuple_types);
859 token_stream.extend(group.stream());867 token_stream.extend(tuple_types);
860 }868 }
861869
862 AbiType::Vec(ref _vec_type) => {}870 AbiType::Vec(ref _vec_type) => {}
873 continue;881 continue;
874 }882 }
875883
876 Self::expand_type(&arg.ty, &mut token_stream);884 Self::expand_type(&arg.ty, &mut token_stream, true);
877 }885 }
886 // println!("!!!!! {}", token_stream);
878887
879 let func_name = self.camel_name.clone();888 let func_name = self.camel_name.clone();
880 let func_name = quote!(SignaturePreferences {889 let func_name = quote!(SignaturePreferences {
886 });895 });
887 token_stream = quote!({ ::evm_coder::make_signature!(new fn(#func_name),#token_stream) });896 token_stream = quote!({ ::evm_coder::make_signature!(new fn(#func_name),#token_stream) });
888
889 // println!("!!!!! {}", custom_signature);
890
891 token_stream897 token_stream
892 }898 }