1use crate::{TokenProgramDecoder, PROGRAM_ID};
3
4#[cfg(feature = "postgres")]
5pub mod postgres;
6
7#[cfg(feature = "graphql")]
8pub mod graphql;
9
10pub mod amount_to_ui_amount;
11pub mod approve;
12pub mod approve_checked;
13pub mod batch;
14pub mod burn;
15pub mod burn_checked;
16pub mod close_account;
17pub mod freeze_account;
18pub mod get_account_data_size;
19pub mod initialize_account;
20pub mod initialize_account2;
21pub mod initialize_account3;
22pub mod initialize_immutable_owner;
23pub mod initialize_mint;
24pub mod initialize_mint2;
25pub mod initialize_multisig;
26pub mod initialize_multisig2;
27pub mod mint_to;
28pub mod mint_to_checked;
29pub mod revoke;
30pub mod set_authority;
31pub mod sync_native;
32pub mod thaw_account;
33pub mod transfer;
34pub mod transfer_checked;
35pub mod ui_amount_to_amount;
36pub mod unwrap_lamports;
37pub mod withdraw_excess_lamports;
38
39pub use self::{
40 amount_to_ui_amount::*, approve::*, approve_checked::*, batch::*, burn::*, burn_checked::*,
41 close_account::*, freeze_account::*, get_account_data_size::*, initialize_account::*,
42 initialize_account2::*, initialize_account3::*, initialize_immutable_owner::*,
43 initialize_mint::*, initialize_mint2::*, initialize_multisig::*, initialize_multisig2::*,
44 mint_to::*, mint_to_checked::*, revoke::*, set_authority::*, sync_native::*, thaw_account::*,
45 transfer::*, transfer_checked::*, ui_amount_to_amount::*, unwrap_lamports::*,
46 withdraw_excess_lamports::*,
47};
48
49#[derive(Debug, Clone, PartialEq)]
50#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
51#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
52pub enum TokenProgramInstruction {
53 AmountToUiAmount {
54 program_id: solana_pubkey::Pubkey,
55 data: AmountToUiAmount,
56 accounts: AmountToUiAmountInstructionAccounts,
57 },
58 Approve {
59 program_id: solana_pubkey::Pubkey,
60 data: Approve,
61 accounts: ApproveInstructionAccounts,
62 },
63 ApproveChecked {
64 program_id: solana_pubkey::Pubkey,
65 data: ApproveChecked,
66 accounts: ApproveCheckedInstructionAccounts,
67 },
68 Batch {
69 program_id: solana_pubkey::Pubkey,
70 data: Batch,
71 accounts: BatchInstructionAccounts,
72 },
73 Burn {
74 program_id: solana_pubkey::Pubkey,
75 data: Burn,
76 accounts: BurnInstructionAccounts,
77 },
78 BurnChecked {
79 program_id: solana_pubkey::Pubkey,
80 data: BurnChecked,
81 accounts: BurnCheckedInstructionAccounts,
82 },
83 CloseAccount {
84 program_id: solana_pubkey::Pubkey,
85 data: CloseAccount,
86 accounts: CloseAccountInstructionAccounts,
87 },
88 FreezeAccount {
89 program_id: solana_pubkey::Pubkey,
90 data: FreezeAccount,
91 accounts: FreezeAccountInstructionAccounts,
92 },
93 GetAccountDataSize {
94 program_id: solana_pubkey::Pubkey,
95 data: GetAccountDataSize,
96 accounts: GetAccountDataSizeInstructionAccounts,
97 },
98 InitializeAccount {
99 program_id: solana_pubkey::Pubkey,
100 data: InitializeAccount,
101 accounts: InitializeAccountInstructionAccounts,
102 },
103 InitializeAccount2 {
104 program_id: solana_pubkey::Pubkey,
105 data: InitializeAccount2,
106 accounts: InitializeAccount2InstructionAccounts,
107 },
108 InitializeAccount3 {
109 program_id: solana_pubkey::Pubkey,
110 data: InitializeAccount3,
111 accounts: InitializeAccount3InstructionAccounts,
112 },
113 InitializeImmutableOwner {
114 program_id: solana_pubkey::Pubkey,
115 data: InitializeImmutableOwner,
116 accounts: InitializeImmutableOwnerInstructionAccounts,
117 },
118 InitializeMint {
119 program_id: solana_pubkey::Pubkey,
120 data: InitializeMint,
121 accounts: InitializeMintInstructionAccounts,
122 },
123 InitializeMint2 {
124 program_id: solana_pubkey::Pubkey,
125 data: InitializeMint2,
126 accounts: InitializeMint2InstructionAccounts,
127 },
128 InitializeMultisig {
129 program_id: solana_pubkey::Pubkey,
130 data: InitializeMultisig,
131 accounts: InitializeMultisigInstructionAccounts,
132 },
133 InitializeMultisig2 {
134 program_id: solana_pubkey::Pubkey,
135 data: InitializeMultisig2,
136 accounts: InitializeMultisig2InstructionAccounts,
137 },
138 MintTo {
139 program_id: solana_pubkey::Pubkey,
140 data: MintTo,
141 accounts: MintToInstructionAccounts,
142 },
143 MintToChecked {
144 program_id: solana_pubkey::Pubkey,
145 data: MintToChecked,
146 accounts: MintToCheckedInstructionAccounts,
147 },
148 Revoke {
149 program_id: solana_pubkey::Pubkey,
150 data: Revoke,
151 accounts: RevokeInstructionAccounts,
152 },
153 SetAuthority {
154 program_id: solana_pubkey::Pubkey,
155 data: SetAuthority,
156 accounts: SetAuthorityInstructionAccounts,
157 },
158 SyncNative {
159 program_id: solana_pubkey::Pubkey,
160 data: SyncNative,
161 accounts: SyncNativeInstructionAccounts,
162 },
163 ThawAccount {
164 program_id: solana_pubkey::Pubkey,
165 data: ThawAccount,
166 accounts: ThawAccountInstructionAccounts,
167 },
168 Transfer {
169 program_id: solana_pubkey::Pubkey,
170 data: Transfer,
171 accounts: TransferInstructionAccounts,
172 },
173 TransferChecked {
174 program_id: solana_pubkey::Pubkey,
175 data: TransferChecked,
176 accounts: TransferCheckedInstructionAccounts,
177 },
178 UiAmountToAmount {
179 program_id: solana_pubkey::Pubkey,
180 data: UiAmountToAmount,
181 accounts: UiAmountToAmountInstructionAccounts,
182 },
183 UnwrapLamports {
184 program_id: solana_pubkey::Pubkey,
185 data: UnwrapLamports,
186 accounts: UnwrapLamportsInstructionAccounts,
187 },
188 WithdrawExcessLamports {
189 program_id: solana_pubkey::Pubkey,
190 data: WithdrawExcessLamports,
191 accounts: WithdrawExcessLamportsInstructionAccounts,
192 },
193}
194
195impl carbon_core::instruction::InstructionDecoder<'_> for TokenProgramDecoder {
196 type InstructionType = TokenProgramInstruction;
197
198 fn decode_instruction(
199 &self,
200 instruction: &solana_instruction::Instruction,
201 ) -> Option<Self::InstructionType> {
202 if instruction.program_id != PROGRAM_ID {
203 return None;
204 }
205
206 carbon_core::try_decode_instructions!(
207 instruction,
208 PROGRAM_ID,
209 TokenProgramInstruction::AmountToUiAmount => AmountToUiAmount,
210 TokenProgramInstruction::Approve => Approve,
211 TokenProgramInstruction::ApproveChecked => ApproveChecked,
212 TokenProgramInstruction::Batch => Batch,
213 TokenProgramInstruction::Burn => Burn,
214 TokenProgramInstruction::BurnChecked => BurnChecked,
215 TokenProgramInstruction::CloseAccount => CloseAccount,
216 TokenProgramInstruction::FreezeAccount => FreezeAccount,
217 TokenProgramInstruction::GetAccountDataSize => GetAccountDataSize,
218 TokenProgramInstruction::InitializeAccount => InitializeAccount,
219 TokenProgramInstruction::InitializeAccount2 => InitializeAccount2,
220 TokenProgramInstruction::InitializeAccount3 => InitializeAccount3,
221 TokenProgramInstruction::InitializeImmutableOwner => InitializeImmutableOwner,
222 TokenProgramInstruction::InitializeMint => InitializeMint,
223 TokenProgramInstruction::InitializeMint2 => InitializeMint2,
224 TokenProgramInstruction::InitializeMultisig => InitializeMultisig,
225 TokenProgramInstruction::InitializeMultisig2 => InitializeMultisig2,
226 TokenProgramInstruction::MintTo => MintTo,
227 TokenProgramInstruction::MintToChecked => MintToChecked,
228 TokenProgramInstruction::Revoke => Revoke,
229 TokenProgramInstruction::SetAuthority => SetAuthority,
230 TokenProgramInstruction::SyncNative => SyncNative,
231 TokenProgramInstruction::ThawAccount => ThawAccount,
232 TokenProgramInstruction::Transfer => Transfer,
233 TokenProgramInstruction::TransferChecked => TransferChecked,
234 TokenProgramInstruction::UiAmountToAmount => UiAmountToAmount,
235 TokenProgramInstruction::UnwrapLamports => UnwrapLamports,
236 TokenProgramInstruction::WithdrawExcessLamports => WithdrawExcessLamports,
237 )
238 }
239}