evm-coder 0.4.3

EVM call decoding/encoding proc macros
Documentation
use evm_coder::{dummy_contract, solidity_interface, types::*};

type Result<T> = core::result::Result<T, String>;

pub struct Contract(bool);
dummy_contract! {
	macro_rules! Contract_result {...}
	impl Contract for Contract {...}
}

#[solidity_interface(name = A)]
impl Contract {
	fn method_a() -> Result<()> {
		Ok(())
	}
}

#[solidity_interface(name = B)]
impl Contract {
	fn method_b() -> Result<()> {
		Ok(())
	}
}

#[solidity_interface(name = Contract, is(
	A(if(this.0)),
	B(if(!this.0)),
))]
impl Contract {}

#[test]
fn conditional_erc165() {
	assert!(ContractCall::supports_interface(
		&Contract(true),
		ACall::METHOD_A
	));
	assert!(!ContractCall::supports_interface(
		&Contract(false),
		ACall::METHOD_A
	));

	assert!(ContractCall::supports_interface(
		&Contract(false),
		BCall::METHOD_B
	));
	assert!(!ContractCall::supports_interface(
		&Contract(true),
		BCall::METHOD_B
	));
}