1use evm_coder::{types::*, solidity_interface, execution::Result, Call};23pub struct Contract(bool);45#[solidity_interface(name = A)]6impl Contract {7 fn method_a() -> Result<void> {8 Ok(())9 }10}1112#[solidity_interface(name = B)]13impl Contract {14 fn method_b() -> Result<void> {15 Ok(())16 }17}1819#[solidity_interface(name = Contract, is(20 A(if(this.0)),21 B(if(!this.0)),22))]23impl Contract {}2425#[test]26fn conditional_erc165() {27 assert!(ContractCall::supports_interface(28 &Contract(true),29 ACall::METHOD_A30 ));31 assert!(!ContractCall::supports_interface(32 &Contract(false),33 ACall::METHOD_A34 ));3536 assert!(ContractCall::supports_interface(37 &Contract(false),38 BCall::METHOD_B39 ));40 assert!(!ContractCall::supports_interface(41 &Contract(true),42 BCall::METHOD_B43 ));44}