waterpump-evm-pool-sdk 0.1.0

EVM pool SDK — viewers, infusers, harvesters, swappers for Uniswap V3/V4, PancakeSwap, Slipstream, Shadow, Algebra
Documentation
//! Type conversion functions between evm-pool-lib and uniswap-v3-lib types

use crate::traits::pool_infuser::{
    AddBatchLiquidityParams, AddLiquidityOptions, AddLiquidityParams, AddLiquiditySpecificOptions,
    CollectOptions, CollectParams, RemoveBatchLiquidityParams, RemoveLiquidityOptions,
    RemoveLiquidityParams,
};

/// Convert AddLiquidityParams from evm-pool-lib to uniswap-v3-lib
pub fn convert_add_liquidity_params(
    params: AddLiquidityParams,
) -> waterpump_evm_uniswap_v3_client::AddLiquidityParams {
    waterpump_evm_uniswap_v3_client::AddLiquidityParams {
        amount0: params.amount0,
        amount1: params.amount1,
        tick_upper: params.tick_upper,
        tick_lower: params.tick_lower,
        token0_price: params.token0_price,
        specific_opts: convert_add_liquidity_specific_options(params.specific_opts),
    }
}

/// Convert AddLiquidityOptions from evm-pool-lib to uniswap-v3-lib
pub fn convert_add_liquidity_options(
    options: AddLiquidityOptions,
) -> waterpump_evm_uniswap_v3_client::AddLiquidityOptions {
    waterpump_evm_uniswap_v3_client::AddLiquidityOptions {
        slippage_tolerance: options.slippage_tolerance,
        deadline: options.deadline,
        use_native: options.use_native,
        token0_permit: options.token0_permit,
        token1_permit: options.token1_permit,
    }
}

/// Convert AddLiquiditySpecificOptions from evm-pool-lib to uniswap-v3-lib
pub fn convert_add_liquidity_specific_options(
    opts: AddLiquiditySpecificOptions,
) -> waterpump_evm_uniswap_v3_client::AddLiquiditySpecificOptions {
    match opts {
        AddLiquiditySpecificOptions::Mint(mint_opts) => {
            waterpump_evm_uniswap_v3_client::AddLiquiditySpecificOptions::Mint(
                waterpump_evm_uniswap_v3_client::MintSpecificOptions {
                    recipient: mint_opts.recipient,
                    create_pool: mint_opts.create_pool,
                },
            )
        }
        AddLiquiditySpecificOptions::Increase(inc_opts) => {
            waterpump_evm_uniswap_v3_client::AddLiquiditySpecificOptions::Increase(
                waterpump_evm_uniswap_v3_client::IncreaseSpecificOptions {
                    token_id: inc_opts.token_id,
                },
            )
        }
    }
}

/// Convert AddBatchLiquidityParams from evm-pool-lib to uniswap-v3-lib
pub fn convert_add_batch_liquidity_params(
    params: AddBatchLiquidityParams,
) -> waterpump_evm_uniswap_v3_client::AddBatchLiquidityParams {
    waterpump_evm_uniswap_v3_client::AddBatchLiquidityParams {
        token0_price: params.token0_price,
        items: params
            .items
            .into_iter()
            .map(|item| waterpump_evm_uniswap_v3_client::AddBatchLiquidityItem {
                amount0: item.amount0,
                amount1: item.amount1,
                tick_upper: item.tick_upper,
                tick_lower: item.tick_lower,
                specific_opts: convert_add_liquidity_specific_options(item.specific_opts),
            })
            .collect(),
    }
}

/// Convert RemoveLiquidityParams from evm-pool-lib to uniswap-v3-lib
pub fn convert_remove_liquidity_params(
    params: RemoveLiquidityParams,
) -> waterpump_evm_uniswap_v3_client::RemoveLiquidityParams {
    waterpump_evm_uniswap_v3_client::RemoveLiquidityParams {
        token_id: params.token_id,
        liquidity: params.liquidity,
        recipient: params.recipient,
        deadline: params.deadline,
        token0_price: params.token0_price,
        tick_lower: params.tick_lower,
        tick_upper: params.tick_upper,
    }
}

/// Convert RemoveLiquidityOptions from evm-pool-lib to uniswap-v3-lib
pub fn convert_remove_liquidity_options(
    options: RemoveLiquidityOptions,
) -> waterpump_evm_uniswap_v3_client::RemoveLiquidityOptions {
    waterpump_evm_uniswap_v3_client::RemoveLiquidityOptions {
        slippage_tolerance: options.slippage_tolerance,
        burn_token: options.burn_token,
        permit: options.permit.map(|p| waterpump_evm_uniswap_v3_client::NFTPermitOptions {
            signature: p.signature,
            deadline: p.deadline,
            spender: p.spender,
            nonce: p.nonce,
        }),
        collect_options: convert_collect_options(options.collect_options),
    }
}

/// Convert RemoveBatchLiquidityParams from evm-pool-lib to uniswap-v3-lib
pub fn convert_remove_batch_liquidity_params(
    params: RemoveBatchLiquidityParams,
) -> waterpump_evm_uniswap_v3_client::RemoveBatchLiquidityParams {
    waterpump_evm_uniswap_v3_client::RemoveBatchLiquidityParams {
        token0_price: params.token0_price,
        recipient: params.recipient,
        deadline: params.deadline,
        items: params
            .items
            .into_iter()
            .map(|item| waterpump_evm_uniswap_v3_client::RemoveBatchLiquidityItem {
                token_id: item.token_id,
                liquidity: item.liquidity,
                tick_lower: item.tick_lower,
                tick_upper: item.tick_upper,
                burn_token: item.burn_token,
            })
            .collect(),
    }
}

/// Convert CollectParams from evm-pool-lib to uniswap-v3-lib
pub fn convert_collect_params(
    params: CollectParams,
) -> waterpump_evm_uniswap_v3_client::CollectParams {
    waterpump_evm_uniswap_v3_client::CollectParams {
        token_id: params.token_id,
        recipient: params.recipient,
    }
}

/// Convert CollectOptions from evm-pool-lib to uniswap-v3-lib
pub fn convert_collect_options(
    options: CollectOptions,
) -> waterpump_evm_uniswap_v3_client::CollectOptions {
    waterpump_evm_uniswap_v3_client::CollectOptions {
        expected_currency_owed0: options.expected_currency_owed0,
        expected_currency_owed1: options.expected_currency_owed1,
    }
}

/// Convert MethodParameters from uniswap-v3-lib to evm-pool-lib
pub fn convert_method_parameters(
    params: waterpump_evm_uniswap_v3_client::MethodParameters,
) -> crate::pool_swappers::common::MethodParameters {
    crate::pool_swappers::common::MethodParameters {
        calldata: params.calldata,
        value: params.value,
    }
}