carbon_wavebreak_decoder/accounts/
mod.rs1use carbon_core::account::AccountDecoder;
2use carbon_core::deserialize::CarbonDeserialize;
3
4use crate::PROGRAM_ID;
5
6use super::WavebreakDecoder;
7pub mod authority_config;
8pub mod bonding_curve;
9pub mod consumed_permission;
10pub mod mint_config;
11pub mod permission_config;
12
13pub enum WavebreakAccount {
14 AuthorityConfig(Box<authority_config::AuthorityConfig>),
15 BondingCurve(bonding_curve::BondingCurve),
16 MintConfig(mint_config::MintConfig),
17 PermissionConfig(permission_config::PermissionConfig),
18 ConsumedPermission(consumed_permission::ConsumedPermission),
19}
20
21impl AccountDecoder<'_> for WavebreakDecoder {
22 type AccountType = WavebreakAccount;
23 fn decode_account(
24 &self,
25 account: &solana_account::Account,
26 ) -> Option<carbon_core::account::DecodedAccount<Self::AccountType>> {
27 if !account.owner.eq(&PROGRAM_ID) {
28 return None;
29 }
30
31 if let Some(decoded_account) =
32 authority_config::AuthorityConfig::deserialize(account.data.as_slice())
33 {
34 return Some(carbon_core::account::DecodedAccount {
35 lamports: account.lamports,
36 data: WavebreakAccount::AuthorityConfig(Box::new(decoded_account)),
37 owner: account.owner,
38 executable: account.executable,
39 rent_epoch: account.rent_epoch,
40 });
41 }
42
43 if let Some(decoded_account) =
44 bonding_curve::BondingCurve::deserialize(account.data.as_slice())
45 {
46 return Some(carbon_core::account::DecodedAccount {
47 lamports: account.lamports,
48 data: WavebreakAccount::BondingCurve(decoded_account),
49 owner: account.owner,
50 executable: account.executable,
51 rent_epoch: account.rent_epoch,
52 });
53 }
54
55 if let Some(decoded_account) = mint_config::MintConfig::deserialize(account.data.as_slice())
56 {
57 return Some(carbon_core::account::DecodedAccount {
58 lamports: account.lamports,
59 data: WavebreakAccount::MintConfig(decoded_account),
60 owner: account.owner,
61 executable: account.executable,
62 rent_epoch: account.rent_epoch,
63 });
64 }
65
66 if let Some(decoded_account) =
67 permission_config::PermissionConfig::deserialize(account.data.as_slice())
68 {
69 return Some(carbon_core::account::DecodedAccount {
70 lamports: account.lamports,
71 data: WavebreakAccount::PermissionConfig(decoded_account),
72 owner: account.owner,
73 executable: account.executable,
74 rent_epoch: account.rent_epoch,
75 });
76 }
77
78 if let Some(decoded_account) =
79 consumed_permission::ConsumedPermission::deserialize(account.data.as_slice())
80 {
81 return Some(carbon_core::account::DecodedAccount {
82 lamports: account.lamports,
83 data: WavebreakAccount::ConsumedPermission(decoded_account),
84 owner: account.owner,
85 executable: account.executable,
86 rent_epoch: account.rent_epoch,
87 });
88 }
89
90 None
91 }
92}