pub mod meteora_amm;
pub mod meteora_damm;
pub mod meteora_dlmm;
pub mod orca_whirlpool;
pub mod program_ids;
pub mod pump;
pub mod pump_fees;
pub mod pump_amm;
pub mod raydium_amm;
pub mod raydium_clmm;
pub mod raydium_cpmm;
pub mod raydium_launchpad;
pub mod utils;
pub mod all_inner;
pub mod inner_common; pub mod pump_amm_inner; pub mod pump_inner; pub mod raydium_clmm_inner; use crate::grpc::types::EventTypeFilter;
pub use meteora_damm::parse_instruction as parse_meteora_damm_instruction;
pub use pump::parse_instruction as parse_pumpfun_instruction;
pub use pump_amm::parse_instruction as parse_pumpswap_instruction;
pub use utils::*;
use crate::core::events::DexEvent;
use program_ids::*;
use solana_sdk::{pubkey::Pubkey, signature::Signature};
#[inline]
pub fn parse_instruction_unified(
instruction_data: &[u8],
accounts: &[Pubkey],
signature: Signature,
slot: u64,
tx_index: u64,
block_time_us: Option<i64>,
grpc_recv_us: i64,
event_type_filter: Option<&EventTypeFilter>,
program_id: &Pubkey,
) -> Option<DexEvent> {
if instruction_data.is_empty() {
return None;
}
if *program_id == PUMPFUN_PROGRAM_ID {
if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pumpfun() {
return None;
}
return parse_pumpfun_instruction(
instruction_data,
accounts,
signature,
slot,
tx_index,
block_time_us,
grpc_recv_us,
);
}
else if *program_id == PUMPSWAP_PROGRAM_ID {
if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pumpswap() {
return None;
}
return parse_pumpswap_instruction(
instruction_data,
accounts,
signature,
slot,
tx_index,
block_time_us,
);
}
else if *program_id == METEORA_DAMM_V2_PROGRAM_ID {
if event_type_filter.is_some() && !event_type_filter.unwrap().includes_meteora_damm_v2() {
return None;
}
return parse_meteora_damm_instruction(
instruction_data,
accounts,
signature,
slot,
tx_index,
block_time_us,
grpc_recv_us,
);
}
else if *program_id == PUMP_FEES_PROGRAM_ID {
if event_type_filter.is_some() && !event_type_filter.unwrap().includes_pump_fees() {
return None;
}
return crate::instr::pump_fees::parse_instruction(
instruction_data,
accounts,
signature,
slot,
tx_index,
block_time_us,
grpc_recv_us,
);
}
None
}