sol_parser_sdk/accounts/
mod.rs1pub mod nonce;
2pub mod program_ids;
3pub mod pumpswap;
4pub mod token;
5pub mod utils;
6use crate::core::events::EventMetadata;
7use crate::grpc::EventTypeFilter;
8use crate::DexEvent;
9pub use nonce::parse_nonce_account;
10use program_ids::*;
11pub use pumpswap::{
12 parse_global_config as parse_pumpswap_global_config, parse_pool as parse_pumpswap_pool,
13};
14pub use token::parse_token_account;
15pub use token::AccountData;
16pub use utils::*;
17
18pub fn parse_account_unified(
19 account: &AccountData,
20 metadata: EventMetadata,
21 event_type_filter: Option<&EventTypeFilter>,
22) -> Option<DexEvent> {
23 if account.data.is_empty() {
24 return None;
25 }
26
27 if let Some(filter) = event_type_filter {
29 if let Some(ref include_only) = filter.include_only {
30 let should_parse = include_only.iter().any(|t| {
32 use crate::grpc::EventType;
33 matches!(
34 t,
35 EventType::TokenAccount
36 | EventType::NonceAccount
37 | EventType::AccountPumpSwapGlobalConfig
38 | EventType::AccountPumpSwapPool
39 )
40 });
41 if !should_parse {
42 return None;
43 }
44 }
45 }
46
47 if account.owner == PUMPSWAP_PROGRAM_ID {
48 if let Some(filter) = event_type_filter {
49 if filter.should_include(crate::grpc::EventType::AccountPumpSwapGlobalConfig)
50 || filter.should_include(crate::grpc::EventType::AccountPumpSwapPool)
51 {
52 let event = parse_pumpswap_account(account, metadata.clone());
53 if event.is_some() {
54 return event;
55 }
56 }
57 }
58 }
59 if nonce::is_nonce_account(&account.data) {
60 if let Some(filter) = event_type_filter {
62 if !filter.should_include(crate::grpc::EventType::NonceAccount) {
63 return None;
64 }
65 }
66 return parse_nonce_account(account, metadata);
67 }
68 if let Some(filter) = event_type_filter {
70 let includes_token = filter.should_include(crate::grpc::EventType::TokenAccount);
71 if !includes_token {
72 return None;
73 }
74 }
75 return parse_token_account(account, metadata);
76}
77
78fn parse_pumpswap_account(account: &AccountData, metadata: EventMetadata) -> Option<DexEvent> {
79 if pumpswap::is_global_config_account(&account.data) {
81 return pumpswap::parse_global_config(account, metadata);
82 }
83 if pumpswap::is_pool_account(&account.data) {
84 return pumpswap::parse_pool(account, metadata);
85 }
86 None
87}