Files
solana-streamer/src/streaming/event_parser/core/traits.rs
T

227 lines
13 KiB
Rust
Executable File

use crate::streaming::event_parser::common::EventMetadata;
use crate::streaming::event_parser::core::account_event_parser::{
NonceAccountEvent, TokenAccountEvent, TokenInfoEvent,
};
use crate::streaming::event_parser::core::common_event_parser::{
SetComputeUnitLimitEvent, SetComputeUnitPriceEvent,
};
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::meteora_damm_v2::events::*;
use crate::streaming::event_parser::protocols::meteora_dlmm::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 crate::streaming::event_parser::protocols::whirlpool::events::*;
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
/// Unified Event Enum - Replaces the trait-based approach with a type-safe enum
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub enum DexEvent {
// Bonk events
BonkTradeEvent(BonkTradeEvent),
BonkPoolCreateEvent(BonkPoolCreateEvent),
BonkMigrateToAmmEvent(BonkMigrateToAmmEvent),
BonkMigrateToCpswapEvent(BonkMigrateToCpswapEvent),
BonkPoolStateAccountEvent(BonkPoolStateAccountEvent),
BonkGlobalConfigAccountEvent(BonkGlobalConfigAccountEvent),
BonkPlatformConfigAccountEvent(BonkPlatformConfigAccountEvent),
// PumpFun events
PumpFunCreateTokenEvent(PumpFunCreateTokenEvent),
PumpFunCreateV2TokenEvent(PumpFunCreateV2TokenEvent),
PumpFunTradeEvent(PumpFunTradeEvent),
PumpFunMigrateEvent(PumpFunMigrateEvent),
PumpFunBondingCurveAccountEvent(PumpFunBondingCurveAccountEvent),
PumpFunGlobalAccountEvent(PumpFunGlobalAccountEvent),
// PumpSwap events
PumpSwapBuyEvent(PumpSwapBuyEvent),
PumpSwapSellEvent(PumpSwapSellEvent),
PumpSwapCreatePoolEvent(PumpSwapCreatePoolEvent),
PumpSwapDepositEvent(PumpSwapDepositEvent),
PumpSwapWithdrawEvent(PumpSwapWithdrawEvent),
PumpSwapGlobalConfigAccountEvent(PumpSwapGlobalConfigAccountEvent),
PumpSwapPoolAccountEvent(PumpSwapPoolAccountEvent),
// Raydium AMM V4 events
RaydiumAmmV4SwapEvent(RaydiumAmmV4SwapEvent),
RaydiumAmmV4DepositEvent(RaydiumAmmV4DepositEvent),
RaydiumAmmV4WithdrawEvent(RaydiumAmmV4WithdrawEvent),
RaydiumAmmV4WithdrawPnlEvent(RaydiumAmmV4WithdrawPnlEvent),
RaydiumAmmV4Initialize2Event(RaydiumAmmV4Initialize2Event),
RaydiumAmmV4AmmInfoAccountEvent(RaydiumAmmV4AmmInfoAccountEvent),
// 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),
RaydiumClmmTickArrayBitmapExtensionAccountEvent(RaydiumClmmTickArrayBitmapExtensionAccountEvent),
// Raydium CPMM events
RaydiumCpmmSwapEvent(RaydiumCpmmSwapEvent),
RaydiumCpmmDepositEvent(RaydiumCpmmDepositEvent),
RaydiumCpmmWithdrawEvent(RaydiumCpmmWithdrawEvent),
RaydiumCpmmInitializeEvent(RaydiumCpmmInitializeEvent),
RaydiumCpmmAmmConfigAccountEvent(RaydiumCpmmAmmConfigAccountEvent),
RaydiumCpmmPoolStateAccountEvent(RaydiumCpmmPoolStateAccountEvent),
// Meteora DAMM v2 events
MeteoraDammV2SwapEvent(MeteoraDammV2SwapEvent),
MeteoraDammV2Swap2Event(MeteoraDammV2Swap2Event),
MeteoraDammV2InitializePoolEvent(MeteoraDammV2InitializePoolEvent),
MeteoraDammV2InitializeCustomizablePoolEvent(MeteoraDammV2InitializeCustomizablePoolEvent),
MeteoraDammV2InitializePoolWithDynamicConfigEvent(MeteoraDammV2InitializePoolWithDynamicConfigEvent),
// Meteora DLMM events
MeteoraDlmmLbPairAccountEvent(MeteoraDlmmLbPairAccountEvent),
// Whirlpool events
WhirlpoolAccountEvent(WhirlpoolAccountEvent),
// Common events
TokenAccountEvent(TokenAccountEvent),
NonceAccountEvent(NonceAccountEvent),
TokenInfoEvent(TokenInfoEvent),
BlockMetaEvent(BlockMetaEvent),
SetComputeUnitLimitEvent(SetComputeUnitLimitEvent),
SetComputeUnitPriceEvent(SetComputeUnitPriceEvent),
}
impl DexEvent {
pub fn metadata(&self) -> &EventMetadata {
match self {
DexEvent::BonkTradeEvent(e) => &e.metadata,
DexEvent::BonkPoolCreateEvent(e) => &e.metadata,
DexEvent::BonkMigrateToAmmEvent(e) => &e.metadata,
DexEvent::BonkMigrateToCpswapEvent(e) => &e.metadata,
DexEvent::BonkPoolStateAccountEvent(e) => &e.metadata,
DexEvent::BonkGlobalConfigAccountEvent(e) => &e.metadata,
DexEvent::BonkPlatformConfigAccountEvent(e) => &e.metadata,
DexEvent::PumpFunCreateTokenEvent(e) => &e.metadata,
DexEvent::PumpFunCreateV2TokenEvent(e) => &e.metadata,
DexEvent::PumpFunTradeEvent(e) => &e.metadata,
DexEvent::PumpFunMigrateEvent(e) => &e.metadata,
DexEvent::PumpFunBondingCurveAccountEvent(e) => &e.metadata,
DexEvent::PumpFunGlobalAccountEvent(e) => &e.metadata,
DexEvent::PumpSwapBuyEvent(e) => &e.metadata,
DexEvent::PumpSwapSellEvent(e) => &e.metadata,
DexEvent::PumpSwapCreatePoolEvent(e) => &e.metadata,
DexEvent::PumpSwapDepositEvent(e) => &e.metadata,
DexEvent::PumpSwapWithdrawEvent(e) => &e.metadata,
DexEvent::PumpSwapGlobalConfigAccountEvent(e) => &e.metadata,
DexEvent::PumpSwapPoolAccountEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4SwapEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4DepositEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4WithdrawEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &e.metadata,
DexEvent::RaydiumAmmV4Initialize2Event(e) => &e.metadata,
DexEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmSwapEvent(e) => &e.metadata,
DexEvent::RaydiumClmmSwapV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmClosePositionEvent(e) => &e.metadata,
DexEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmCreatePoolEvent(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &e.metadata,
DexEvent::RaydiumClmmOpenPositionV2Event(e) => &e.metadata,
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &e.metadata,
DexEvent::RaydiumClmmTickArrayBitmapExtensionAccountEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmInitializeEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &e.metadata,
DexEvent::RaydiumCpmmPoolStateAccountEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2SwapEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2Swap2Event(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &e.metadata,
DexEvent::MeteoraDlmmLbPairAccountEvent(e) => &e.metadata,
DexEvent::WhirlpoolAccountEvent(e) => &e.metadata,
DexEvent::TokenAccountEvent(e) => &e.metadata,
DexEvent::NonceAccountEvent(e) => &e.metadata,
DexEvent::TokenInfoEvent(e) => &e.metadata,
DexEvent::BlockMetaEvent(e) => &e.metadata,
DexEvent::SetComputeUnitLimitEvent(e) => &e.metadata,
DexEvent::SetComputeUnitPriceEvent(e) => &e.metadata,
}
}
pub fn metadata_mut(&mut self) -> &mut EventMetadata {
match self {
DexEvent::BonkTradeEvent(e) => &mut e.metadata,
DexEvent::BonkPoolCreateEvent(e) => &mut e.metadata,
DexEvent::BonkMigrateToAmmEvent(e) => &mut e.metadata,
DexEvent::BonkMigrateToCpswapEvent(e) => &mut e.metadata,
DexEvent::BonkPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::BonkGlobalConfigAccountEvent(e) => &mut e.metadata,
DexEvent::BonkPlatformConfigAccountEvent(e) => &mut e.metadata,
DexEvent::PumpFunCreateTokenEvent(e) => &mut e.metadata,
DexEvent::PumpFunCreateV2TokenEvent(e) => &mut e.metadata,
DexEvent::PumpFunTradeEvent(e) => &mut e.metadata,
DexEvent::PumpFunMigrateEvent(e) => &mut e.metadata,
DexEvent::PumpFunBondingCurveAccountEvent(e) => &mut e.metadata,
DexEvent::PumpFunGlobalAccountEvent(e) => &mut e.metadata,
DexEvent::PumpSwapBuyEvent(e) => &mut e.metadata,
DexEvent::PumpSwapSellEvent(e) => &mut e.metadata,
DexEvent::PumpSwapCreatePoolEvent(e) => &mut e.metadata,
DexEvent::PumpSwapDepositEvent(e) => &mut e.metadata,
DexEvent::PumpSwapWithdrawEvent(e) => &mut e.metadata,
DexEvent::PumpSwapGlobalConfigAccountEvent(e) => &mut e.metadata,
DexEvent::PumpSwapPoolAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4SwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4DepositEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4WithdrawEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4WithdrawPnlEvent(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4Initialize2Event(e) => &mut e.metadata,
DexEvent::RaydiumAmmV4AmmInfoAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmSwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmSwapV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmClosePositionEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmIncreaseLiquidityV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmDecreaseLiquidityV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmCreatePoolEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmOpenPositionWithToken22NftEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmOpenPositionV2Event(e) => &mut e.metadata,
DexEvent::RaydiumClmmAmmConfigAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmTickArrayStateAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumClmmTickArrayBitmapExtensionAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmSwapEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmDepositEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmWithdrawEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmInitializeEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmAmmConfigAccountEvent(e) => &mut e.metadata,
DexEvent::RaydiumCpmmPoolStateAccountEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2SwapEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2Swap2Event(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializeCustomizablePoolEvent(e) => &mut e.metadata,
DexEvent::MeteoraDammV2InitializePoolWithDynamicConfigEvent(e) => &mut e.metadata,
DexEvent::MeteoraDlmmLbPairAccountEvent(e) => &mut e.metadata,
DexEvent::WhirlpoolAccountEvent(e) => &mut e.metadata,
DexEvent::TokenAccountEvent(e) => &mut e.metadata,
DexEvent::NonceAccountEvent(e) => &mut e.metadata,
DexEvent::TokenInfoEvent(e) => &mut e.metadata,
DexEvent::BlockMetaEvent(e) => &mut e.metadata,
DexEvent::SetComputeUnitLimitEvent(e) => &mut e.metadata,
DexEvent::SetComputeUnitPriceEvent(e) => &mut e.metadata,
}
}
}