#[macro_export]
macro_rules! impl_token_helper {
($struct_name:ident) => {
#[async_trait::async_trait]
impl $crate::traits::TokenHelper for $struct_name {
fn sender_address(&self) -> alloy::primitives::Address { self.sender_address }
#[tracing::instrument(skip(self, amount), fields(sender_address = ?self.sender_address(), amount = ?amount))]
async fn wrap_eth_if_needed(
&self,
amount: uniswap_sdk_core::prelude::CurrencyAmount<uniswap_sdk_core::prelude::Currency>,
) -> anyhow::Result<bool> {
$crate::common::wrap_eth_if_needed(&self.provider, self.sender_address(), amount).await
}
#[tracing::instrument(skip(self, token, amount, spender), fields(sender_address = ?self.sender_address(), spender_address = ?spender, amount = ?amount))]
async fn approve_if_needed(
&self,
spender: alloy::primitives::Address,
token: &uniswap_sdk_core::prelude::Currency,
amount: uniswap_sdk_core::prelude::CurrencyAmount<uniswap_sdk_core::prelude::Currency>,
) -> anyhow::Result<bool> {
$crate::common::approve_if_needed(&self.provider, self.sender_address(), spender, token, amount).await
}
}
};
}