2025-10-10 18:19:44 +08:00
|
|
|
use crate::streaming::event_parser::common::EventMetadata;
|
|
|
|
|
use crate::streaming::event_parser::core::account_event_parser::{
|
|
|
|
|
NonceAccountEvent, TokenAccountEvent, TokenInfoEvent,
|
|
|
|
|
};
|
|
|
|
|
use crate::streaming::event_parser::protocols::block::block_meta_event::BlockMetaEvent;
|
|
|
|
|
use crate::streaming::event_parser::protocols::bonk::events::*;
|
|
|
|
|
use crate::streaming::event_parser::protocols::pumpfun::events::*;
|
|
|
|
|
use crate::streaming::event_parser::protocols::pumpswap::events::*;
|
|
|
|
|
use crate::streaming::event_parser::protocols::raydium_amm_v4::events::*;
|
|
|
|
|
use crate::streaming::event_parser::protocols::raydium_clmm::events::*;
|
|
|
|
|
use crate::streaming::event_parser::protocols::raydium_cpmm::events::*;
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
2025-07-19 23:46:42 +08:00
|
|
|
use std::fmt::Debug;
|
2025-08-31 22:18:18 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
/// Unified Event Enum - Replaces the trait-based approach with a type-safe enum
|
|
|
|
|
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
|
|
|
|
|
pub enum UnifiedEvent {
|
|
|
|
|
// Bonk events
|
|
|
|
|
BonkTradeEvent(BonkTradeEvent),
|
|
|
|
|
BonkPoolCreateEvent(BonkPoolCreateEvent),
|
|
|
|
|
BonkMigrateToAmmEvent(BonkMigrateToAmmEvent),
|
|
|
|
|
BonkMigrateToCpswapEvent(BonkMigrateToCpswapEvent),
|
|
|
|
|
BonkPoolStateAccountEvent(BonkPoolStateAccountEvent),
|
|
|
|
|
BonkGlobalConfigAccountEvent(BonkGlobalConfigAccountEvent),
|
|
|
|
|
BonkPlatformConfigAccountEvent(BonkPlatformConfigAccountEvent),
|
2025-07-19 23:46:42 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// PumpFun events
|
|
|
|
|
PumpFunCreateTokenEvent(PumpFunCreateTokenEvent),
|
|
|
|
|
PumpFunTradeEvent(PumpFunTradeEvent),
|
|
|
|
|
PumpFunMigrateEvent(PumpFunMigrateEvent),
|
|
|
|
|
PumpFunBondingCurveAccountEvent(PumpFunBondingCurveAccountEvent),
|
|
|
|
|
PumpFunGlobalAccountEvent(PumpFunGlobalAccountEvent),
|
2025-07-19 23:46:42 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// PumpSwap events
|
|
|
|
|
PumpSwapBuyEvent(PumpSwapBuyEvent),
|
|
|
|
|
PumpSwapSellEvent(PumpSwapSellEvent),
|
|
|
|
|
PumpSwapCreatePoolEvent(PumpSwapCreatePoolEvent),
|
|
|
|
|
PumpSwapDepositEvent(PumpSwapDepositEvent),
|
|
|
|
|
PumpSwapWithdrawEvent(PumpSwapWithdrawEvent),
|
|
|
|
|
PumpSwapGlobalConfigAccountEvent(PumpSwapGlobalConfigAccountEvent),
|
|
|
|
|
PumpSwapPoolAccountEvent(PumpSwapPoolAccountEvent),
|
2025-07-19 23:46:42 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// Raydium AMM V4 events
|
|
|
|
|
RaydiumAmmV4SwapEvent(RaydiumAmmV4SwapEvent),
|
|
|
|
|
RaydiumAmmV4DepositEvent(RaydiumAmmV4DepositEvent),
|
|
|
|
|
RaydiumAmmV4WithdrawEvent(RaydiumAmmV4WithdrawEvent),
|
|
|
|
|
RaydiumAmmV4WithdrawPnlEvent(RaydiumAmmV4WithdrawPnlEvent),
|
|
|
|
|
RaydiumAmmV4Initialize2Event(RaydiumAmmV4Initialize2Event),
|
|
|
|
|
RaydiumAmmV4AmmInfoAccountEvent(RaydiumAmmV4AmmInfoAccountEvent),
|
2025-07-19 23:46:42 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// Raydium CLMM events
|
|
|
|
|
RaydiumClmmSwapEvent(RaydiumClmmSwapEvent),
|
|
|
|
|
RaydiumClmmSwapV2Event(RaydiumClmmSwapV2Event),
|
|
|
|
|
RaydiumClmmClosePositionEvent(RaydiumClmmClosePositionEvent),
|
|
|
|
|
RaydiumClmmIncreaseLiquidityV2Event(RaydiumClmmIncreaseLiquidityV2Event),
|
|
|
|
|
RaydiumClmmDecreaseLiquidityV2Event(RaydiumClmmDecreaseLiquidityV2Event),
|
|
|
|
|
RaydiumClmmCreatePoolEvent(RaydiumClmmCreatePoolEvent),
|
|
|
|
|
RaydiumClmmOpenPositionWithToken22NftEvent(RaydiumClmmOpenPositionWithToken22NftEvent),
|
|
|
|
|
RaydiumClmmOpenPositionV2Event(RaydiumClmmOpenPositionV2Event),
|
|
|
|
|
RaydiumClmmAmmConfigAccountEvent(RaydiumClmmAmmConfigAccountEvent),
|
|
|
|
|
RaydiumClmmPoolStateAccountEvent(RaydiumClmmPoolStateAccountEvent),
|
|
|
|
|
RaydiumClmmTickArrayStateAccountEvent(RaydiumClmmTickArrayStateAccountEvent),
|
2025-07-29 14:48:43 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// Raydium CPMM events
|
|
|
|
|
RaydiumCpmmSwapEvent(RaydiumCpmmSwapEvent),
|
|
|
|
|
RaydiumCpmmDepositEvent(RaydiumCpmmDepositEvent),
|
|
|
|
|
RaydiumCpmmWithdrawEvent(RaydiumCpmmWithdrawEvent),
|
|
|
|
|
RaydiumCpmmInitializeEvent(RaydiumCpmmInitializeEvent),
|
|
|
|
|
RaydiumCpmmAmmConfigAccountEvent(RaydiumCpmmAmmConfigAccountEvent),
|
|
|
|
|
RaydiumCpmmPoolStateAccountEvent(RaydiumCpmmPoolStateAccountEvent),
|
2025-07-29 14:48:43 +08:00
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
// Common events
|
|
|
|
|
TokenAccountEvent(TokenAccountEvent),
|
|
|
|
|
NonceAccountEvent(NonceAccountEvent),
|
|
|
|
|
TokenInfoEvent(TokenInfoEvent),
|
|
|
|
|
BlockMetaEvent(BlockMetaEvent),
|
2025-07-19 23:46:42 +08:00
|
|
|
}
|
|
|
|
|
|
2025-10-10 18:19:44 +08:00
|
|
|
impl UnifiedEvent {
|
|
|
|
|
pub fn metadata(&self) -> &EventMetadata {
|
|
|
|
|
match self {
|
|
|
|
|
UnifiedEvent::BonkTradeEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPoolCreateEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkMigrateToAmmEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkMigrateToCpswapEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPoolStateAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkGlobalConfigAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPlatformConfigAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunCreateTokenEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunTradeEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunMigrateEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunBondingCurveAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunGlobalAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapBuyEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapSellEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapCreatePoolEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapDepositEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapWithdrawEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapGlobalConfigAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapPoolAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4SwapEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4DepositEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4WithdrawEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4Initialize2Event(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmSwapEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmSwapV2Event(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmClosePositionEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmCreatePoolEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmOpenPositionV2Event(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmAmmConfigAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmPoolStateAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmSwapEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmDepositEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmWithdrawEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmInitializeEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmPoolStateAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::TokenAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::NonceAccountEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::TokenInfoEvent(e) => &e.metadata,
|
|
|
|
|
UnifiedEvent::BlockMetaEvent(e) => &e.metadata,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn metadata_mut(&mut self) -> &mut EventMetadata {
|
|
|
|
|
match self {
|
|
|
|
|
UnifiedEvent::BonkTradeEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPoolCreateEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkMigrateToAmmEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkMigrateToCpswapEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPoolStateAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkGlobalConfigAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BonkPlatformConfigAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunCreateTokenEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunTradeEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunMigrateEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunBondingCurveAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpFunGlobalAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapBuyEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapSellEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapCreatePoolEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapDepositEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapWithdrawEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapGlobalConfigAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::PumpSwapPoolAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4SwapEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4DepositEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4WithdrawEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4Initialize2Event(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmSwapEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmSwapV2Event(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmClosePositionEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmCreatePoolEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmOpenPositionV2Event(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmAmmConfigAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmPoolStateAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmSwapEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmDepositEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmWithdrawEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmInitializeEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::RaydiumCpmmPoolStateAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::TokenAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::NonceAccountEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::TokenInfoEvent(e) => &mut e.metadata,
|
|
|
|
|
UnifiedEvent::BlockMetaEvent(e) => &mut e.metadata,
|
|
|
|
|
}
|
2025-07-19 23:46:42 +08:00
|
|
|
}
|
|
|
|
|
}
|