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