use once_cell::sync::Lazy;
use serde::{Deserialize, Serialize};
use solana_sdk::signature::Signature;
use super::types::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum DexEvent {
PumpFunCreate(PumpFunCreateTokenEvent), PumpFunCreateV2(PumpFunCreateV2TokenEvent), PumpFunTrade(PumpFunTradeEvent), PumpFunBuy(PumpFunTradeEvent), PumpFunSell(PumpFunTradeEvent), PumpFunBuyExactSolIn(PumpFunTradeEvent), PumpFunMigrate(PumpFunMigrateEvent),
PumpSwapTrade(PumpSwapTradeEvent), PumpSwapBuy(PumpSwapBuyEvent), PumpSwapSell(PumpSwapSellEvent), PumpSwapCreatePool(PumpSwapCreatePoolEvent), PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved),
MeteoraDammV2Swap(MeteoraDammV2SwapEvent), MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent), MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent), MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent),
BonkTrade(BonkTradeEvent),
BonkPoolCreate(BonkPoolCreateEvent),
BonkMigrateAmm(BonkMigrateAmmEvent),
RaydiumClmmSwap(RaydiumClmmSwapEvent),
RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
TokenInfo(TokenInfoEvent), TokenAccount(TokenAccountEvent), NonceAccount(NonceAccountEvent), PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), PumpSwapPoolAccount(PumpSwapPoolAccountEvent),
BlockMeta(BlockMetaEvent),
Error(String),
}
static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
signature: Signature::from([0u8; 64]),
slot: 0,
tx_index: 0,
block_time_us: 0,
grpc_recv_us: 0,
recent_blockhash: None,
});
impl DexEvent {
pub fn metadata(&self) -> &EventMetadata {
match self {
DexEvent::PumpFunCreate(e) => &e.metadata,
DexEvent::PumpFunCreateV2(e) => &e.metadata,
DexEvent::PumpFunTrade(e) => &e.metadata,
DexEvent::PumpFunBuy(e) => &e.metadata,
DexEvent::PumpFunSell(e) => &e.metadata,
DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
DexEvent::PumpFunMigrate(e) => &e.metadata,
DexEvent::PumpSwapTrade(e) => &e.metadata,
DexEvent::PumpSwapBuy(e) => &e.metadata,
DexEvent::PumpSwapSell(e) => &e.metadata,
DexEvent::PumpSwapCreatePool(e) => &e.metadata,
DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
DexEvent::BonkTrade(e) => &e.metadata,
DexEvent::BonkPoolCreate(e) => &e.metadata,
DexEvent::BonkMigrateAmm(e) => &e.metadata,
DexEvent::RaydiumClmmSwap(e) => &e.metadata,
DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
DexEvent::TokenInfo(e) => &e.metadata,
DexEvent::TokenAccount(e) => &e.metadata,
DexEvent::NonceAccount(e) => &e.metadata,
DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
DexEvent::BlockMeta(e) => &e.metadata,
DexEvent::Error(_) => &DEFAULT_METADATA,
}
}
pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
match self {
DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
DexEvent::BonkTrade(e) => Some(&mut e.metadata),
DexEvent::BonkPoolCreate(e) => Some(&mut e.metadata),
DexEvent::BonkMigrateAmm(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
DexEvent::TokenInfo(e) => Some(&mut e.metadata),
DexEvent::TokenAccount(e) => Some(&mut e.metadata),
DexEvent::NonceAccount(e) => Some(&mut e.metadata),
DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
DexEvent::BlockMeta(e) => Some(&mut e.metadata),
DexEvent::Error(_) => None,
}
}
}