use soroban_sdk::{contractclient, Address, Bytes, BytesN, Env, String};
pub use stellar_axelar_std::InterchainTokenExecutable;
pub trait CustomInterchainTokenExecutable {
type Error: Into<soroban_sdk::Error>;
fn __interchain_token_service(env: &Env) -> Address;
fn __authorized_execute_with_token(
env: &Env,
source_chain: String,
message_id: String,
source_address: Bytes,
payload: Bytes,
token_id: BytesN<32>,
token_address: Address,
amount: i128,
) -> Result<(), Self::Error>;
}
#[contractclient(name = "InterchainTokenExecutableClient")]
pub trait InterchainTokenExecutableInterface:
CustomInterchainTokenExecutable + stellar_axelar_std::interfaces::DeriveOnly
{
fn interchain_token_service(env: &Env) -> Address;
fn execute_with_interchain_token(
env: &Env,
source_chain: String,
message_id: String,
source_address: Bytes,
payload: Bytes,
token_id: BytesN<32>,
token_address: Address,
amount: i128,
) -> Result<(), soroban_sdk::Error>;
}