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