git.delta.rocks / unique-network / refs/commits / 2dd914e7de8d

difftreelog

Merge pull request #358 from UniqueNetwork/feature/solidity-interface-where-clause

kozyrevdev2022-06-03parents: #fb4beb0 #d600f90.patch.diff
in: master
Support where clause in #[solidity_interface]

2 files changed

modifiedcrates/evm-coder-macros/src/solidity_interface.rsdiffbeforeafterboth
--- a/crates/evm-coder-macros/src/solidity_interface.rs
+++ b/crates/evm-coder-macros/src/solidity_interface.rs
@@ -801,6 +801,7 @@
 		let generics = self.generics;
 		let gen_ref = generics_reference(&generics);
 		let gen_data = generics_data(&generics);
+		let gen_where = &generics.where_clause;
 
 		let call_sub = self
 			.info
@@ -956,7 +957,9 @@
 					return Ok(None);
 				}
 			}
-			impl #generics ::evm_coder::Weighted for #call_name #gen_ref {
+			impl #generics ::evm_coder::Weighted for #call_name #gen_ref
+			#gen_where
+			{
 				#[allow(unused_variables)]
 				fn weight(&self) -> ::evm_coder::execution::DispatchInfo {
 					match self {
@@ -971,7 +974,9 @@
 					}
 				}
 			}
-			impl #generics ::evm_coder::Callable<#call_name #gen_ref> for #name {
+			impl #generics ::evm_coder::Callable<#call_name #gen_ref> for #name
+			#gen_where
+			{
 				#[allow(unreachable_code)] // In case of no inner calls
 				fn call(&mut self, c: Msg<#call_name #gen_ref>) -> ::evm_coder::execution::ResultWithPostInfo<::evm_coder::abi::AbiWriter> {
 					use ::evm_coder::abi::AbiWrite;
modifiedcrates/evm-coder/tests/generics.rsdiffbeforeafterboth
before · crates/evm-coder/tests/generics.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use std::marker::PhantomData;18use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};1920struct Generic<T>(PhantomData<T>);2122#[solidity_interface(name = "GenericIs")]23impl<T> Generic<T> {24	fn test_1(&self) -> Result<uint256> {25		todo!()26	}27}2829#[solidity_interface(name = "Generic", is(GenericIs))]30impl<T: Into<u32>> Generic<T> {31	fn test_2(&self) -> Result<uint256> {32		todo!()33	}34}3536generate_stubgen!(gen_iface, GenericCall<()>, false);
after · crates/evm-coder/tests/generics.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617use std::marker::PhantomData;18use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};1920struct Generic<T>(PhantomData<T>);2122#[solidity_interface(name = "GenericIs")]23impl<T> Generic<T> {24	fn test_1(&self) -> Result<uint256> {25		todo!()26	}27}2829#[solidity_interface(name = "Generic", is(GenericIs))]30impl<T: Into<u32>> Generic<T> {31	fn test_2(&self) -> Result<uint256> {32		todo!()33	}34}3536generate_stubgen!(gen_iface, GenericCall<()>, false);3738#[solidity_interface(name = "GenericWhere")]39impl<T> Generic<T>40where41	T: core::fmt::Debug,42{43	fn test_3(&self) -> Result<uint256> {44		todo!()45	}46}4748generate_stubgen!(gen_where_iface, GenericWhereCall<()>, false);