carbon_raydium_launchpad_decoder/accounts/
mod.rs1use alloc::boxed::Box;
2use carbon_core::account::AccountDecoder;
3use carbon_core::deserialize::CarbonDeserialize;
4
5use crate::PROGRAM_ID;
6
7use super::RaydiumLaunchpadDecoder;
8pub mod global_config;
9pub mod platform_config;
10pub mod pool_state;
11pub mod vesting_record;
12
13pub enum RaydiumLaunchpadAccount {
14 GlobalConfig(Box<global_config::GlobalConfig>),
15 PlatformConfig(Box<platform_config::PlatformConfig>),
16 PoolState(Box<pool_state::PoolState>),
17 VestingRecord(vesting_record::VestingRecord),
18}
19
20impl AccountDecoder<'_> for RaydiumLaunchpadDecoder {
21 type AccountType = RaydiumLaunchpadAccount;
22 fn decode_account(
23 &self,
24 account: &solana_account::Account,
25 ) -> Option<carbon_core::account::DecodedAccount<Self::AccountType>> {
26 if !account.owner.eq(&PROGRAM_ID) {
27 return None;
28 }
29
30 if let Some(decoded_account) =
31 global_config::GlobalConfig::deserialize(account.data.as_slice())
32 {
33 return Some(carbon_core::account::DecodedAccount {
34 lamports: account.lamports,
35 data: RaydiumLaunchpadAccount::GlobalConfig(Box::new(decoded_account)),
36 owner: account.owner,
37 executable: account.executable,
38 rent_epoch: account.rent_epoch,
39 });
40 }
41
42 if let Some(decoded_account) =
43 platform_config::PlatformConfig::deserialize(account.data.as_slice())
44 {
45 return Some(carbon_core::account::DecodedAccount {
46 lamports: account.lamports,
47 data: RaydiumLaunchpadAccount::PlatformConfig(Box::new(decoded_account)),
48 owner: account.owner,
49 executable: account.executable,
50 rent_epoch: account.rent_epoch,
51 });
52 }
53
54 if let Some(decoded_account) = pool_state::PoolState::deserialize(account.data.as_slice()) {
55 return Some(carbon_core::account::DecodedAccount {
56 lamports: account.lamports,
57 data: RaydiumLaunchpadAccount::PoolState(Box::new(decoded_account)),
58 owner: account.owner,
59 executable: account.executable,
60 rent_epoch: account.rent_epoch,
61 });
62 }
63
64 if let Some(decoded_account) =
65 vesting_record::VestingRecord::deserialize(account.data.as_slice())
66 {
67 return Some(carbon_core::account::DecodedAccount {
68 lamports: account.lamports,
69 data: RaydiumLaunchpadAccount::VestingRecord(decoded_account),
70 owner: account.owner,
71 executable: account.executable,
72 rent_epoch: account.rent_epoch,
73 });
74 }
75
76 None
77 }
78}