use crate::core::events::*;
use solana_sdk::pubkey::Pubkey;
pub type AccountGetter<'a> = dyn Fn(usize) -> Pubkey + 'a;
pub fn fill_clmm_swap_accounts(e: &mut RaydiumClmmSwapEvent, get: &AccountGetter<'_>) {
if e.pool_state == Pubkey::default() {
e.pool_state = get(2);
}
if e.sender == Pubkey::default() {
e.sender = get(0);
}
if e.token_account_0 == Pubkey::default() {
e.token_account_0 = get(3);
}
if e.token_account_1 == Pubkey::default() {
e.token_account_1 = get(4);
}
}
pub fn fill_clmm_create_pool_accounts(e: &mut RaydiumClmmCreatePoolEvent, get: &AccountGetter<'_>) {
if e.creator == Pubkey::default() {
e.creator = get(0);
}
if e.pool == Pubkey::default() {
e.pool = get(2);
}
if e.token_0_mint == Pubkey::default() {
e.token_0_mint = get(3);
}
if e.token_1_mint == Pubkey::default() {
e.token_1_mint = get(4);
}
if e.token_vault_0 == Pubkey::default() {
e.token_vault_0 = get(5);
}
if e.token_vault_1 == Pubkey::default() {
e.token_vault_1 = get(6);
}
}
pub fn fill_clmm_open_position_accounts(
e: &mut RaydiumClmmOpenPositionEvent,
get: &AccountGetter<'_>,
) {
if e.user == Pubkey::default() {
e.user = get(1);
}
if e.position_nft_mint == Pubkey::default() {
e.position_nft_mint = get(2);
}
if e.pool == Pubkey::default() {
e.pool = get(5);
}
}
pub fn fill_clmm_close_position_accounts(
e: &mut RaydiumClmmClosePositionEvent,
get: &AccountGetter<'_>,
) {
if e.user == Pubkey::default() {
e.user = get(0);
}
if e.position_nft_mint == Pubkey::default() {
e.position_nft_mint = get(1);
}
}
pub fn fill_clmm_increase_liquidity_accounts(
e: &mut RaydiumClmmIncreaseLiquidityEvent,
get: &AccountGetter<'_>,
) {
if e.user == Pubkey::default() {
e.user = get(0);
}
if e.position_nft_mint == Pubkey::default() {
e.position_nft_mint = get(1);
}
if e.pool == Pubkey::default() {
e.pool = get(2);
}
}
pub fn fill_clmm_decrease_liquidity_accounts(
e: &mut RaydiumClmmDecreaseLiquidityEvent,
get: &AccountGetter<'_>,
) {
if e.user == Pubkey::default() {
e.user = get(0);
}
if e.position_nft_mint == Pubkey::default() {
e.position_nft_mint = get(1);
}
if e.pool == Pubkey::default() {
e.pool = get(3);
}
}
pub fn fill_cpmm_swap_accounts(_e: &mut RaydiumCpmmSwapEvent, _get: &AccountGetter<'_>) {
}
pub fn fill_cpmm_deposit_accounts(e: &mut RaydiumCpmmDepositEvent, get: &AccountGetter<'_>) {
if e.user == Pubkey::default() {
e.user = get(0); }
}
pub fn fill_cpmm_withdraw_accounts(e: &mut RaydiumCpmmWithdrawEvent, get: &AccountGetter<'_>) {
if e.user == Pubkey::default() {
e.user = get(0); }
}
pub fn fill_cpmm_initialize_accounts(e: &mut RaydiumCpmmInitializeEvent, get: &AccountGetter<'_>) {
if e.creator == Pubkey::default() {
e.creator = get(0);
}
if e.pool == Pubkey::default() {
e.pool = get(3);
}
}
pub fn fill_amm_v4_swap_accounts(e: &mut RaydiumAmmV4SwapEvent, get: &AccountGetter<'_>) {
if e.amm == Pubkey::default() {
e.amm = get(1);
}
}
pub fn fill_amm_v4_deposit_accounts(e: &mut RaydiumAmmV4DepositEvent, get: &AccountGetter<'_>) {
if e.token_program == Pubkey::default() {
e.token_program = get(0);
}
if e.amm_authority == Pubkey::default() {
e.amm_authority = get(2);
}
}
pub fn fill_amm_v4_withdraw_accounts(e: &mut RaydiumAmmV4WithdrawEvent, get: &AccountGetter<'_>) {
if e.token_program == Pubkey::default() {
e.token_program = get(0);
}
if e.amm_authority == Pubkey::default() {
e.amm_authority = get(2);
}
if e.amm_open_orders == Pubkey::default() {
e.amm_open_orders = get(3);
}
}