Skip to main content

sol_parser_sdk/core/events/
enum_impl.rs

1use super::types::*;
2use once_cell::sync::Lazy;
3use serde::{Deserialize, Serialize};
4use solana_sdk::signature::Signature;
5
6// ====================== 统一的 DEX 事件枚举 ======================
7
8/// 统一的 DEX 事件枚举 - 参考 sol-dex-shreds 的做法
9#[derive(Debug, Clone, Serialize, Deserialize)]
10#[non_exhaustive]
11pub enum DexEvent {
12    RawAccountSnapshot(Box<crate::accounts::liquidity_snapshot::RawAccountSnapshotEvent>),
13    LiquidityAccountSnapshot(
14        Box<crate::accounts::liquidity_snapshot::LiquidityAccountSnapshotEvent>,
15    ),
16    // PumpFun 事件
17    PumpFunCreate(PumpFunCreateTokenEvent),     // - 已对接
18    PumpFunCreateV2(PumpFunCreateV2TokenEvent), // - 已对接 (CreateV2 / Mayhem)
19    PumpFunTrade(PumpFunTradeEvent),            // - 已对接 (统一交易事件,包含所有交易类型)
20    PumpFunBuy(PumpFunTradeEvent),              // - 已对接 (仅买入事件,用于过滤)
21    PumpFunSell(PumpFunTradeEvent),             // - 已对接 (仅卖出事件,用于过滤)
22    PumpFunBuyExactSolIn(PumpFunTradeEvent),    // - 已对接 (精确SOL买入事件,用于过滤)
23    PumpFunMigrate(PumpFunMigrateEvent),        // - 已对接
24    /// Pump fees:`CreateFeeSharingConfigEvent`(`pfeeUx...`,见 `idls/pump_fees.json`)
25    PumpFeesCreateFeeSharingConfig(PumpFeesCreateFeeSharingConfigEvent),
26    PumpFeesInitializeFeeConfig(PumpFeesInitializeFeeConfigEvent),
27    PumpFeesResetFeeSharingConfig(PumpFeesResetFeeSharingConfigEvent),
28    PumpFeesRevokeFeeSharingAuthority(PumpFeesRevokeFeeSharingAuthorityEvent),
29    PumpFeesTransferFeeSharingAuthority(PumpFeesTransferFeeSharingAuthorityEvent),
30    PumpFeesUpdateAdmin(PumpFeesUpdateAdminEvent),
31    PumpFeesUpdateFeeConfig(PumpFeesUpdateFeeConfigEvent),
32    PumpFeesUpdateFeeShares(PumpFeesUpdateFeeSharesEvent),
33    PumpFeesUpsertFeeTiers(PumpFeesUpsertFeeTiersEvent),
34    /// Pump.fun:曲线 creator 迁移(`migrateBondingCurveCreatorEvent`)
35    PumpFunMigrateBondingCurveCreator(PumpFunMigrateBondingCurveCreatorEvent),
36    PumpFunGlobalAccount(PumpFunGlobalAccountEvent), // - 已对接
37    PumpFunBondingCurveAccount(PumpFunBondingCurveAccountEvent),
38    PumpFunFeeConfigAccount(PumpFunFeeConfigAccountEvent),
39    PumpFunSharingConfigAccount(PumpFunSharingConfigAccountEvent),
40    PumpFunGlobalVolumeAccumulatorAccount(PumpFunGlobalVolumeAccumulatorAccountEvent),
41    PumpFunUserVolumeAccumulatorAccount(PumpFunUserVolumeAccumulatorAccountEvent),
42    PumpSwapTrade(PumpSwapTradeEvent), // - 已对接 (buy/sell/buy_exact_sol_in)
43    PumpSwapBuy(PumpSwapBuyEvent),     // - 已对接 (legacy)
44    PumpSwapSell(PumpSwapSellEvent),   // - 已对接 (legacy)
45    PumpSwapCreatePool(PumpSwapCreatePoolEvent), // - 已对接
46    PumpSwapLiquidityAdded(PumpSwapLiquidityAdded), // - 已对接
47    PumpSwapLiquidityRemoved(PumpSwapLiquidityRemoved), // - 已对接
48
49    // Meteora DAMM V2 事件
50    MeteoraDammV2Swap(MeteoraDammV2SwapEvent), // - 已对接
51    MeteoraDammV2CreatePosition(MeteoraDammV2CreatePositionEvent), // - 已对接
52    MeteoraDammV2ClosePosition(MeteoraDammV2ClosePositionEvent), // - 已对接
53    MeteoraDammV2AddLiquidity(MeteoraDammV2AddLiquidityEvent), // - 已对接
54    MeteoraDammV2RemoveLiquidity(MeteoraDammV2RemoveLiquidityEvent), // - 已对接
55    MeteoraDammV2InitializePool(MeteoraDammV2InitializePoolEvent), // - 已对接
56    MeteoraDammV2UpdateDelegatePermission(MeteoraDammV2UpdateDelegatePermissionEvent),
57    MeteoraDammV2WithdrawDeadLiquidityReward(MeteoraDammV2WithdrawDeadLiquidityRewardEvent),
58    MeteoraDammV2CreateConfig(MeteoraDammV2CreateConfigEvent),
59    MeteoraDammV2CreateDynamicConfig(MeteoraDammV2CreateDynamicConfigEvent),
60
61    // Meteora DBC 事件
62    MeteoraDbcSwap(MeteoraDbcSwapEvent),
63    MeteoraDbcInitializePool(MeteoraDbcInitializePoolEvent),
64    MeteoraDbcCurveComplete(MeteoraDbcCurveCompleteEvent),
65
66    // RaydiumLaunchlab 事件
67    RaydiumLaunchlabTrade(RaydiumLaunchlabTradeEvent),
68    RaydiumLaunchlabPoolCreate(RaydiumLaunchlabPoolCreateEvent),
69    RaydiumLaunchlabMigrateAmm(RaydiumLaunchlabMigrateAmmEvent),
70
71    // Raydium CLMM 事件
72    RaydiumClmmSwap(RaydiumClmmSwapEvent),
73    RaydiumClmmCreatePool(RaydiumClmmCreatePoolEvent),
74    RaydiumClmmOpenPosition(RaydiumClmmOpenPositionEvent),
75    RaydiumClmmOpenPositionWithTokenExtNft(RaydiumClmmOpenPositionWithTokenExtNftEvent),
76    RaydiumClmmClosePosition(RaydiumClmmClosePositionEvent),
77    RaydiumClmmIncreaseLiquidity(RaydiumClmmIncreaseLiquidityEvent),
78    RaydiumClmmDecreaseLiquidity(RaydiumClmmDecreaseLiquidityEvent),
79    RaydiumClmmLiquidityChange(RaydiumClmmLiquidityChangeEvent),
80    RaydiumClmmConfigChange(RaydiumClmmConfigChangeEvent),
81    RaydiumClmmCreatePersonalPosition(RaydiumClmmCreatePersonalPositionEvent),
82    RaydiumClmmLiquidityCalculate(RaydiumClmmLiquidityCalculateEvent),
83    RaydiumClmmOpenLimitOrder(RaydiumClmmOpenLimitOrderEvent),
84    RaydiumClmmIncreaseLimitOrder(RaydiumClmmIncreaseLimitOrderEvent),
85    RaydiumClmmDecreaseLimitOrder(RaydiumClmmDecreaseLimitOrderEvent),
86    RaydiumClmmSettleLimitOrder(RaydiumClmmSettleLimitOrderEvent),
87    RaydiumClmmUpdateRewardInfos(RaydiumClmmUpdateRewardInfosEvent),
88    RaydiumClmmCollectFee(RaydiumClmmCollectFeeEvent),
89    RaydiumClmmAmmConfigAccount(Box<RaydiumClmmAmmConfigAccountEvent>),
90    RaydiumClmmPoolStateAccount(Box<RaydiumClmmPoolStateAccountEvent>),
91    RaydiumClmmTickArrayStateAccount(Box<RaydiumClmmTickArrayStateAccountEvent>),
92
93    // Raydium CPMM 事件
94    RaydiumCpmmSwap(RaydiumCpmmSwapEvent),
95    RaydiumCpmmDeposit(RaydiumCpmmDepositEvent),
96    RaydiumCpmmWithdraw(RaydiumCpmmWithdrawEvent),
97    RaydiumCpmmInitialize(RaydiumCpmmInitializeEvent),
98    RaydiumCpmmAmmConfigAccount(Box<RaydiumCpmmAmmConfigAccountEvent>),
99    RaydiumCpmmPoolStateAccount(Box<RaydiumCpmmPoolStateAccountEvent>),
100    RaydiumCpmmCollectCreatorFee(RaydiumCpmmCollectCreatorFeeEvent),
101    RaydiumCpmmCreatorFeeShareAccount(Box<RaydiumCpmmCreatorFeeShareAccountEvent>),
102
103    // Raydium AMM V4 事件
104    RaydiumAmmV4Swap(RaydiumAmmV4SwapEvent),
105    RaydiumAmmV4Deposit(RaydiumAmmV4DepositEvent),
106    RaydiumAmmV4Initialize2(RaydiumAmmV4Initialize2Event),
107    RaydiumAmmV4Withdraw(RaydiumAmmV4WithdrawEvent),
108    RaydiumAmmV4WithdrawPnl(RaydiumAmmV4WithdrawPnlEvent),
109
110    // Orca Whirlpool 事件
111    OrcaWhirlpoolSwap(OrcaWhirlpoolSwapEvent),
112    OrcaWhirlpoolLiquidityIncreased(OrcaWhirlpoolLiquidityIncreasedEvent),
113    OrcaWhirlpoolLiquidityDecreased(OrcaWhirlpoolLiquidityDecreasedEvent),
114    OrcaWhirlpoolPoolInitialized(OrcaWhirlpoolPoolInitializedEvent),
115    OrcaWhirlpoolAccount(Box<OrcaWhirlpoolAccountEvent>),
116    OrcaPositionAccount(Box<OrcaPositionAccountEvent>),
117    OrcaTickArrayAccount(Box<OrcaTickArrayAccountEvent>),
118    OrcaFeeTierAccount(Box<OrcaFeeTierAccountEvent>),
119    OrcaWhirlpoolsConfigAccount(Box<OrcaWhirlpoolsConfigAccountEvent>),
120
121    // Meteora Pools 事件
122    MeteoraPoolsSwap(MeteoraPoolsSwapEvent),
123    MeteoraPoolsAddLiquidity(MeteoraPoolsAddLiquidityEvent),
124    MeteoraPoolsRemoveLiquidity(MeteoraPoolsRemoveLiquidityEvent),
125    MeteoraPoolsBootstrapLiquidity(MeteoraPoolsBootstrapLiquidityEvent),
126    MeteoraPoolsPoolCreated(MeteoraPoolsPoolCreatedEvent),
127    MeteoraPoolsSetPoolFees(MeteoraPoolsSetPoolFeesEvent),
128
129    // Meteora DLMM 事件
130    MeteoraDlmmSwap(MeteoraDlmmSwapEvent),
131    MeteoraDlmmAddLiquidity(MeteoraDlmmAddLiquidityEvent),
132    MeteoraDlmmRemoveLiquidity(MeteoraDlmmRemoveLiquidityEvent),
133    MeteoraDlmmInitializePool(MeteoraDlmmInitializePoolEvent),
134    MeteoraDlmmInitializeBinArray(MeteoraDlmmInitializeBinArrayEvent),
135    MeteoraDlmmCreatePosition(MeteoraDlmmCreatePositionEvent),
136    MeteoraDlmmClosePosition(MeteoraDlmmClosePositionEvent),
137    MeteoraDlmmClaimFee(MeteoraDlmmClaimFeeEvent),
138
139    // 账户事件
140    TokenInfo(TokenInfoEvent),       // - 已对接
141    TokenAccount(TokenAccountEvent), // - 已对接
142    NonceAccount(NonceAccountEvent), // - 已对接
143    PumpSwapGlobalConfigAccount(PumpSwapGlobalConfigAccountEvent), // - 已对接
144    PumpSwapPoolAccount(PumpSwapPoolAccountEvent), // - 已对接
145
146    // 区块元数据事件
147    BlockMeta(BlockMetaEvent),
148
149    // 错误事件
150    Error(String),
151}
152
153// 静态默认 EventMetadata,用于 Error 事件
154static DEFAULT_METADATA: Lazy<EventMetadata> = Lazy::new(|| EventMetadata {
155    signature: Signature::from([0u8; 64]),
156    slot: 0,
157    tx_index: 0,
158    block_time_us: 0,
159    grpc_recv_us: 0,
160    recent_blockhash: None,
161});
162
163impl DexEvent {
164    /// 获取事件的元数据
165    pub fn metadata(&self) -> &EventMetadata {
166        match self {
167            // PumpFun 事件
168            DexEvent::PumpFunCreate(e) => &e.metadata,
169            DexEvent::PumpFunCreateV2(e) => &e.metadata,
170            DexEvent::PumpFunTrade(e) => &e.metadata,
171            DexEvent::PumpFunBuy(e) => &e.metadata,
172            DexEvent::PumpFunSell(e) => &e.metadata,
173            DexEvent::PumpFunBuyExactSolIn(e) => &e.metadata,
174            DexEvent::PumpFunMigrate(e) => &e.metadata,
175            DexEvent::PumpFeesCreateFeeSharingConfig(e) => &e.metadata,
176            DexEvent::PumpFeesInitializeFeeConfig(e) => &e.metadata,
177            DexEvent::PumpFeesResetFeeSharingConfig(e) => &e.metadata,
178            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => &e.metadata,
179            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => &e.metadata,
180            DexEvent::PumpFeesUpdateAdmin(e) => &e.metadata,
181            DexEvent::PumpFeesUpdateFeeConfig(e) => &e.metadata,
182            DexEvent::PumpFeesUpdateFeeShares(e) => &e.metadata,
183            DexEvent::PumpFeesUpsertFeeTiers(e) => &e.metadata,
184            DexEvent::PumpFunMigrateBondingCurveCreator(e) => &e.metadata,
185            DexEvent::PumpFunGlobalAccount(e) => &e.metadata,
186            DexEvent::PumpFunBondingCurveAccount(e) => &e.metadata,
187            DexEvent::PumpFunFeeConfigAccount(e) => &e.metadata,
188            DexEvent::PumpFunSharingConfigAccount(e) => &e.metadata,
189            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => &e.metadata,
190            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => &e.metadata,
191
192            // PumpSwap 事件
193            DexEvent::PumpSwapTrade(e) => &e.metadata,
194            DexEvent::PumpSwapBuy(e) => &e.metadata,
195            DexEvent::PumpSwapSell(e) => &e.metadata,
196            DexEvent::PumpSwapCreatePool(e) => &e.metadata,
197            DexEvent::PumpSwapLiquidityAdded(e) => &e.metadata,
198            DexEvent::PumpSwapLiquidityRemoved(e) => &e.metadata,
199
200            // Meteora DAMM V2 事件
201            DexEvent::MeteoraDammV2Swap(e) => &e.metadata,
202            DexEvent::MeteoraDammV2CreatePosition(e) => &e.metadata,
203            DexEvent::MeteoraDammV2ClosePosition(e) => &e.metadata,
204            DexEvent::MeteoraDammV2AddLiquidity(e) => &e.metadata,
205            DexEvent::MeteoraDammV2RemoveLiquidity(e) => &e.metadata,
206            DexEvent::MeteoraDammV2InitializePool(e) => &e.metadata,
207            DexEvent::MeteoraDammV2UpdateDelegatePermission(e) => &e.metadata,
208            DexEvent::MeteoraDammV2WithdrawDeadLiquidityReward(e) => &e.metadata,
209            DexEvent::MeteoraDammV2CreateConfig(e) => &e.metadata,
210            DexEvent::MeteoraDammV2CreateDynamicConfig(e) => &e.metadata,
211            DexEvent::MeteoraDbcSwap(e) => &e.metadata,
212            DexEvent::MeteoraDbcInitializePool(e) => &e.metadata,
213            DexEvent::MeteoraDbcCurveComplete(e) => &e.metadata,
214
215            // RaydiumLaunchlab 事件
216            DexEvent::RaydiumLaunchlabTrade(e) => &e.metadata,
217            DexEvent::RaydiumLaunchlabPoolCreate(e) => &e.metadata,
218            DexEvent::RaydiumLaunchlabMigrateAmm(e) => &e.metadata,
219
220            // Raydium CLMM 事件
221            DexEvent::RaydiumClmmSwap(e) => &e.metadata,
222            DexEvent::RaydiumClmmCreatePool(e) => &e.metadata,
223            DexEvent::RaydiumClmmOpenPosition(e) => &e.metadata,
224            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => &e.metadata,
225            DexEvent::RaydiumClmmClosePosition(e) => &e.metadata,
226            DexEvent::RaydiumClmmIncreaseLiquidity(e) => &e.metadata,
227            DexEvent::RaydiumClmmDecreaseLiquidity(e) => &e.metadata,
228            DexEvent::RaydiumClmmLiquidityChange(e) => &e.metadata,
229            DexEvent::RaydiumClmmConfigChange(e) => &e.metadata,
230            DexEvent::RaydiumClmmCreatePersonalPosition(e) => &e.metadata,
231            DexEvent::RaydiumClmmLiquidityCalculate(e) => &e.metadata,
232            DexEvent::RaydiumClmmOpenLimitOrder(e) => &e.metadata,
233            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => &e.metadata,
234            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => &e.metadata,
235            DexEvent::RaydiumClmmSettleLimitOrder(e) => &e.metadata,
236            DexEvent::RaydiumClmmUpdateRewardInfos(e) => &e.metadata,
237            DexEvent::RaydiumClmmCollectFee(e) => &e.metadata,
238            DexEvent::RaydiumClmmAmmConfigAccount(e) => &e.metadata,
239            DexEvent::RaydiumClmmPoolStateAccount(e) => &e.metadata,
240            DexEvent::RaydiumClmmTickArrayStateAccount(e) => &e.metadata,
241
242            // Raydium CPMM 事件
243            DexEvent::RaydiumCpmmSwap(e) => &e.metadata,
244            DexEvent::RaydiumCpmmDeposit(e) => &e.metadata,
245            DexEvent::RaydiumCpmmWithdraw(e) => &e.metadata,
246            DexEvent::RaydiumCpmmInitialize(e) => &e.metadata,
247            DexEvent::RaydiumCpmmAmmConfigAccount(e) => &e.metadata,
248            DexEvent::RaydiumCpmmPoolStateAccount(e) => &e.metadata,
249            DexEvent::RaydiumCpmmCollectCreatorFee(e) => &e.metadata,
250            DexEvent::RaydiumCpmmCreatorFeeShareAccount(e) => &e.metadata,
251
252            // Raydium AMM V4 事件
253            DexEvent::RaydiumAmmV4Swap(e) => &e.metadata,
254            DexEvent::RaydiumAmmV4Deposit(e) => &e.metadata,
255            DexEvent::RaydiumAmmV4Initialize2(e) => &e.metadata,
256            DexEvent::RaydiumAmmV4Withdraw(e) => &e.metadata,
257            DexEvent::RaydiumAmmV4WithdrawPnl(e) => &e.metadata,
258
259            // Orca Whirlpool 事件
260            DexEvent::OrcaWhirlpoolSwap(e) => &e.metadata,
261            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => &e.metadata,
262            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => &e.metadata,
263            DexEvent::OrcaWhirlpoolPoolInitialized(e) => &e.metadata,
264            DexEvent::OrcaWhirlpoolAccount(e) => &e.metadata,
265            DexEvent::OrcaPositionAccount(e) => &e.metadata,
266            DexEvent::OrcaTickArrayAccount(e) => &e.metadata,
267            DexEvent::LiquidityAccountSnapshot(e) => &e.metadata,
268            DexEvent::RawAccountSnapshot(e) => &e.metadata,
269            DexEvent::OrcaFeeTierAccount(e) => &e.metadata,
270            DexEvent::OrcaWhirlpoolsConfigAccount(e) => &e.metadata,
271
272            // Meteora Pools 事件
273            DexEvent::MeteoraPoolsSwap(e) => &e.metadata,
274            DexEvent::MeteoraPoolsAddLiquidity(e) => &e.metadata,
275            DexEvent::MeteoraPoolsRemoveLiquidity(e) => &e.metadata,
276            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => &e.metadata,
277            DexEvent::MeteoraPoolsPoolCreated(e) => &e.metadata,
278            DexEvent::MeteoraPoolsSetPoolFees(e) => &e.metadata,
279
280            // Meteora DLMM 事件
281            DexEvent::MeteoraDlmmSwap(e) => &e.metadata,
282            DexEvent::MeteoraDlmmAddLiquidity(e) => &e.metadata,
283            DexEvent::MeteoraDlmmRemoveLiquidity(e) => &e.metadata,
284            DexEvent::MeteoraDlmmInitializePool(e) => &e.metadata,
285            DexEvent::MeteoraDlmmInitializeBinArray(e) => &e.metadata,
286            DexEvent::MeteoraDlmmCreatePosition(e) => &e.metadata,
287            DexEvent::MeteoraDlmmClosePosition(e) => &e.metadata,
288            DexEvent::MeteoraDlmmClaimFee(e) => &e.metadata,
289
290            // 账户事件
291            DexEvent::TokenInfo(e) => &e.metadata,
292            DexEvent::TokenAccount(e) => &e.metadata,
293            DexEvent::NonceAccount(e) => &e.metadata,
294            DexEvent::PumpSwapGlobalConfigAccount(e) => &e.metadata,
295            DexEvent::PumpSwapPoolAccount(e) => &e.metadata,
296
297            // 区块元数据事件
298            DexEvent::BlockMeta(e) => &e.metadata,
299
300            // 错误事件 - 返回默认元数据
301            DexEvent::Error(_) => &DEFAULT_METADATA,
302        }
303    }
304
305    /// Mutable metadata for filling shared fields (e.g. recent_blockhash). Returns None for Error variant.
306    pub fn metadata_mut(&mut self) -> Option<&mut EventMetadata> {
307        match self {
308            DexEvent::PumpFunCreate(e) => Some(&mut e.metadata),
309            DexEvent::PumpFunCreateV2(e) => Some(&mut e.metadata),
310            DexEvent::PumpFunTrade(e) => Some(&mut e.metadata),
311            DexEvent::PumpFunBuy(e) => Some(&mut e.metadata),
312            DexEvent::PumpFunSell(e) => Some(&mut e.metadata),
313            DexEvent::PumpFunBuyExactSolIn(e) => Some(&mut e.metadata),
314            DexEvent::PumpFunMigrate(e) => Some(&mut e.metadata),
315            DexEvent::PumpFeesCreateFeeSharingConfig(e) => Some(&mut e.metadata),
316            DexEvent::PumpFeesInitializeFeeConfig(e) => Some(&mut e.metadata),
317            DexEvent::PumpFeesResetFeeSharingConfig(e) => Some(&mut e.metadata),
318            DexEvent::PumpFeesRevokeFeeSharingAuthority(e) => Some(&mut e.metadata),
319            DexEvent::PumpFeesTransferFeeSharingAuthority(e) => Some(&mut e.metadata),
320            DexEvent::PumpFeesUpdateAdmin(e) => Some(&mut e.metadata),
321            DexEvent::PumpFeesUpdateFeeConfig(e) => Some(&mut e.metadata),
322            DexEvent::PumpFeesUpdateFeeShares(e) => Some(&mut e.metadata),
323            DexEvent::PumpFeesUpsertFeeTiers(e) => Some(&mut e.metadata),
324            DexEvent::PumpFunMigrateBondingCurveCreator(e) => Some(&mut e.metadata),
325            DexEvent::PumpFunGlobalAccount(e) => Some(&mut e.metadata),
326            DexEvent::PumpFunBondingCurveAccount(e) => Some(&mut e.metadata),
327            DexEvent::PumpFunFeeConfigAccount(e) => Some(&mut e.metadata),
328            DexEvent::PumpFunSharingConfigAccount(e) => Some(&mut e.metadata),
329            DexEvent::PumpFunGlobalVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
330            DexEvent::PumpFunUserVolumeAccumulatorAccount(e) => Some(&mut e.metadata),
331            DexEvent::PumpSwapTrade(e) => Some(&mut e.metadata),
332            DexEvent::PumpSwapBuy(e) => Some(&mut e.metadata),
333            DexEvent::PumpSwapSell(e) => Some(&mut e.metadata),
334            DexEvent::PumpSwapCreatePool(e) => Some(&mut e.metadata),
335            DexEvent::PumpSwapLiquidityAdded(e) => Some(&mut e.metadata),
336            DexEvent::PumpSwapLiquidityRemoved(e) => Some(&mut e.metadata),
337            DexEvent::MeteoraDammV2Swap(e) => Some(&mut e.metadata),
338            DexEvent::MeteoraDammV2CreatePosition(e) => Some(&mut e.metadata),
339            DexEvent::MeteoraDammV2ClosePosition(e) => Some(&mut e.metadata),
340            DexEvent::MeteoraDammV2AddLiquidity(e) => Some(&mut e.metadata),
341            DexEvent::MeteoraDammV2RemoveLiquidity(e) => Some(&mut e.metadata),
342            DexEvent::MeteoraDammV2InitializePool(e) => Some(&mut e.metadata),
343            DexEvent::MeteoraDammV2UpdateDelegatePermission(e) => Some(&mut e.metadata),
344            DexEvent::MeteoraDammV2WithdrawDeadLiquidityReward(e) => Some(&mut e.metadata),
345            DexEvent::MeteoraDammV2CreateConfig(e) => Some(&mut e.metadata),
346            DexEvent::MeteoraDammV2CreateDynamicConfig(e) => Some(&mut e.metadata),
347            DexEvent::MeteoraDbcSwap(e) => Some(&mut e.metadata),
348            DexEvent::MeteoraDbcInitializePool(e) => Some(&mut e.metadata),
349            DexEvent::MeteoraDbcCurveComplete(e) => Some(&mut e.metadata),
350            DexEvent::RaydiumLaunchlabTrade(e) => Some(&mut e.metadata),
351            DexEvent::RaydiumLaunchlabPoolCreate(e) => Some(&mut e.metadata),
352            DexEvent::RaydiumLaunchlabMigrateAmm(e) => Some(&mut e.metadata),
353            DexEvent::RaydiumClmmSwap(e) => Some(&mut e.metadata),
354            DexEvent::RaydiumClmmCreatePool(e) => Some(&mut e.metadata),
355            DexEvent::RaydiumClmmOpenPosition(e) => Some(&mut e.metadata),
356            DexEvent::RaydiumClmmOpenPositionWithTokenExtNft(e) => Some(&mut e.metadata),
357            DexEvent::RaydiumClmmClosePosition(e) => Some(&mut e.metadata),
358            DexEvent::RaydiumClmmIncreaseLiquidity(e) => Some(&mut e.metadata),
359            DexEvent::RaydiumClmmDecreaseLiquidity(e) => Some(&mut e.metadata),
360            DexEvent::RaydiumClmmLiquidityChange(e) => Some(&mut e.metadata),
361            DexEvent::RaydiumClmmConfigChange(e) => Some(&mut e.metadata),
362            DexEvent::RaydiumClmmCreatePersonalPosition(e) => Some(&mut e.metadata),
363            DexEvent::RaydiumClmmLiquidityCalculate(e) => Some(&mut e.metadata),
364            DexEvent::RaydiumClmmOpenLimitOrder(e) => Some(&mut e.metadata),
365            DexEvent::RaydiumClmmIncreaseLimitOrder(e) => Some(&mut e.metadata),
366            DexEvent::RaydiumClmmDecreaseLimitOrder(e) => Some(&mut e.metadata),
367            DexEvent::RaydiumClmmSettleLimitOrder(e) => Some(&mut e.metadata),
368            DexEvent::RaydiumClmmUpdateRewardInfos(e) => Some(&mut e.metadata),
369            DexEvent::RaydiumClmmCollectFee(e) => Some(&mut e.metadata),
370            DexEvent::RaydiumClmmAmmConfigAccount(e) => Some(&mut e.metadata),
371            DexEvent::RaydiumClmmPoolStateAccount(e) => Some(&mut e.metadata),
372            DexEvent::RaydiumClmmTickArrayStateAccount(e) => Some(&mut e.metadata),
373            DexEvent::RaydiumCpmmSwap(e) => Some(&mut e.metadata),
374            DexEvent::RaydiumCpmmDeposit(e) => Some(&mut e.metadata),
375            DexEvent::RaydiumCpmmWithdraw(e) => Some(&mut e.metadata),
376            DexEvent::RaydiumCpmmInitialize(e) => Some(&mut e.metadata),
377            DexEvent::RaydiumCpmmAmmConfigAccount(e) => Some(&mut e.metadata),
378            DexEvent::RaydiumCpmmPoolStateAccount(e) => Some(&mut e.metadata),
379            DexEvent::RaydiumCpmmCollectCreatorFee(e) => Some(&mut e.metadata),
380            DexEvent::RaydiumCpmmCreatorFeeShareAccount(e) => Some(&mut e.metadata),
381            DexEvent::RaydiumAmmV4Swap(e) => Some(&mut e.metadata),
382            DexEvent::RaydiumAmmV4Deposit(e) => Some(&mut e.metadata),
383            DexEvent::RaydiumAmmV4Initialize2(e) => Some(&mut e.metadata),
384            DexEvent::RaydiumAmmV4Withdraw(e) => Some(&mut e.metadata),
385            DexEvent::RaydiumAmmV4WithdrawPnl(e) => Some(&mut e.metadata),
386            DexEvent::OrcaWhirlpoolSwap(e) => Some(&mut e.metadata),
387            DexEvent::OrcaWhirlpoolLiquidityIncreased(e) => Some(&mut e.metadata),
388            DexEvent::OrcaWhirlpoolLiquidityDecreased(e) => Some(&mut e.metadata),
389            DexEvent::OrcaWhirlpoolPoolInitialized(e) => Some(&mut e.metadata),
390            DexEvent::OrcaWhirlpoolAccount(e) => Some(&mut e.metadata),
391            DexEvent::OrcaPositionAccount(e) => Some(&mut e.metadata),
392            DexEvent::OrcaTickArrayAccount(e) => Some(&mut e.metadata),
393            DexEvent::LiquidityAccountSnapshot(e) => Some(&mut e.metadata),
394            DexEvent::RawAccountSnapshot(e) => Some(&mut e.metadata),
395            DexEvent::OrcaFeeTierAccount(e) => Some(&mut e.metadata),
396            DexEvent::OrcaWhirlpoolsConfigAccount(e) => Some(&mut e.metadata),
397            DexEvent::MeteoraPoolsSwap(e) => Some(&mut e.metadata),
398            DexEvent::MeteoraPoolsAddLiquidity(e) => Some(&mut e.metadata),
399            DexEvent::MeteoraPoolsRemoveLiquidity(e) => Some(&mut e.metadata),
400            DexEvent::MeteoraPoolsBootstrapLiquidity(e) => Some(&mut e.metadata),
401            DexEvent::MeteoraPoolsPoolCreated(e) => Some(&mut e.metadata),
402            DexEvent::MeteoraPoolsSetPoolFees(e) => Some(&mut e.metadata),
403            DexEvent::MeteoraDlmmSwap(e) => Some(&mut e.metadata),
404            DexEvent::MeteoraDlmmAddLiquidity(e) => Some(&mut e.metadata),
405            DexEvent::MeteoraDlmmRemoveLiquidity(e) => Some(&mut e.metadata),
406            DexEvent::MeteoraDlmmInitializePool(e) => Some(&mut e.metadata),
407            DexEvent::MeteoraDlmmInitializeBinArray(e) => Some(&mut e.metadata),
408            DexEvent::MeteoraDlmmCreatePosition(e) => Some(&mut e.metadata),
409            DexEvent::MeteoraDlmmClosePosition(e) => Some(&mut e.metadata),
410            DexEvent::MeteoraDlmmClaimFee(e) => Some(&mut e.metadata),
411            DexEvent::TokenInfo(e) => Some(&mut e.metadata),
412            DexEvent::TokenAccount(e) => Some(&mut e.metadata),
413            DexEvent::NonceAccount(e) => Some(&mut e.metadata),
414            DexEvent::PumpSwapGlobalConfigAccount(e) => Some(&mut e.metadata),
415            DexEvent::PumpSwapPoolAccount(e) => Some(&mut e.metadata),
416            DexEvent::BlockMeta(e) => Some(&mut e.metadata),
417            DexEvent::Error(_) => None,
418        }
419    }
420}