use crate::core::events::*;
use solana_sdk::pubkey::Pubkey;
pub type AccountGetter<'a> = dyn Fn(usize) -> Pubkey + 'a;
macro_rules! fill_pumpswap_trade_common {
($event:expr, $get:expr) => {{
let e = $event;
let get = $get;
if e.pool == Pubkey::default() {
e.pool = get(0);
}
if e.user == Pubkey::default() {
e.user = get(1);
}
if e.base_mint == Pubkey::default() {
e.base_mint = get(3);
}
if e.quote_mint == Pubkey::default() {
e.quote_mint = get(4);
}
if e.user_base_token_account == Pubkey::default() {
e.user_base_token_account = get(5);
}
if e.user_quote_token_account == Pubkey::default() {
e.user_quote_token_account = get(6);
}
if e.pool_base_token_account == Pubkey::default() {
e.pool_base_token_account = get(7);
}
if e.pool_quote_token_account == Pubkey::default() {
e.pool_quote_token_account = get(8);
}
if e.protocol_fee_recipient == Pubkey::default() {
e.protocol_fee_recipient = get(9);
}
if e.protocol_fee_recipient_token_account == Pubkey::default() {
e.protocol_fee_recipient_token_account = get(10);
}
if e.base_token_program == Pubkey::default() {
e.base_token_program = get(11);
}
if e.quote_token_program == Pubkey::default() {
e.quote_token_program = get(12);
}
if e.coin_creator_vault_ata == Pubkey::default() {
e.coin_creator_vault_ata = get(17);
}
if e.coin_creator_vault_authority == Pubkey::default() {
e.coin_creator_vault_authority = get(18);
}
}};
}
pub fn fill_buy_accounts(e: &mut PumpSwapBuyEvent, get: &AccountGetter<'_>) {
fill_pumpswap_trade_common!(e, get);
}
pub fn fill_sell_accounts(e: &mut PumpSwapSellEvent, get: &AccountGetter<'_>) {
fill_pumpswap_trade_common!(e, get);
}
pub fn fill_trade_accounts(_e: &mut PumpSwapTradeEvent, _get: &AccountGetter<'_>) {
}
pub fn fill_create_pool_accounts(e: &mut PumpSwapCreatePoolEvent, get: &AccountGetter<'_>) {
if e.pool == Pubkey::default() {
e.pool = get(0);
}
if e.creator == Pubkey::default() {
e.creator = get(2);
}
if e.base_mint == Pubkey::default() {
e.base_mint = get(3);
}
if e.quote_mint == Pubkey::default() {
e.quote_mint = get(4);
}
if e.lp_mint == Pubkey::default() {
e.lp_mint = get(5);
}
if e.user_base_token_account == Pubkey::default() {
e.user_base_token_account = get(6);
}
if e.user_quote_token_account == Pubkey::default() {
e.user_quote_token_account = get(7);
}
}
pub fn fill_liquidity_added_accounts(_e: &mut PumpSwapLiquidityAdded, _get: &AccountGetter<'_>) {
}
pub fn fill_liquidity_removed_accounts(
_e: &mut PumpSwapLiquidityRemoved,
_get: &AccountGetter<'_>,
) {
}