waterpump-evm-pool-sdk 0.1.0

EVM pool SDK — viewers, infusers, harvesters, swappers for Uniswap V3/V4, PancakeSwap, Slipstream, Shadow, Algebra
Documentation
/// Macro to implement TokenHelper trait for structs that have
/// a public `sender_address` field
#[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 }

            /// Wrap ETH to WETH
            /// Returns true if wrapping was needed and executed, false if not needed
            #[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
            }

            /// Approve the spender to spend tokens if needed
            /// Returns true if approval was needed and executed, false if already approved or native token
            #[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
            }
        }
    };
}