use crate::{TokenProgramDecoder, PROGRAM_ID};
#[cfg(feature = "postgres")]
pub mod postgres;
#[cfg(feature = "graphql")]
pub mod graphql;
pub mod amount_to_ui_amount;
pub mod approve;
pub mod approve_checked;
pub mod batch;
pub mod burn;
pub mod burn_checked;
pub mod close_account;
pub mod freeze_account;
pub mod get_account_data_size;
pub mod initialize_account;
pub mod initialize_account2;
pub mod initialize_account3;
pub mod initialize_immutable_owner;
pub mod initialize_mint;
pub mod initialize_mint2;
pub mod initialize_multisig;
pub mod initialize_multisig2;
pub mod mint_to;
pub mod mint_to_checked;
pub mod revoke;
pub mod set_authority;
pub mod sync_native;
pub mod thaw_account;
pub mod transfer;
pub mod transfer_checked;
pub mod ui_amount_to_amount;
pub mod unwrap_lamports;
pub mod withdraw_excess_lamports;
pub use self::{
amount_to_ui_amount::*, approve::*, approve_checked::*, batch::*, burn::*, burn_checked::*,
close_account::*, freeze_account::*, get_account_data_size::*, initialize_account::*,
initialize_account2::*, initialize_account3::*, initialize_immutable_owner::*,
initialize_mint::*, initialize_mint2::*, initialize_multisig::*, initialize_multisig2::*,
mint_to::*, mint_to_checked::*, revoke::*, set_authority::*, sync_native::*, thaw_account::*,
transfer::*, transfer_checked::*, ui_amount_to_amount::*, unwrap_lamports::*,
withdraw_excess_lamports::*,
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
pub enum TokenProgramInstruction {
AmountToUiAmount {
program_id: solana_pubkey::Pubkey,
data: AmountToUiAmount,
accounts: AmountToUiAmountInstructionAccounts,
},
Approve {
program_id: solana_pubkey::Pubkey,
data: Approve,
accounts: ApproveInstructionAccounts,
},
ApproveChecked {
program_id: solana_pubkey::Pubkey,
data: ApproveChecked,
accounts: ApproveCheckedInstructionAccounts,
},
Batch {
program_id: solana_pubkey::Pubkey,
data: Batch,
accounts: BatchInstructionAccounts,
},
Burn {
program_id: solana_pubkey::Pubkey,
data: Burn,
accounts: BurnInstructionAccounts,
},
BurnChecked {
program_id: solana_pubkey::Pubkey,
data: BurnChecked,
accounts: BurnCheckedInstructionAccounts,
},
CloseAccount {
program_id: solana_pubkey::Pubkey,
data: CloseAccount,
accounts: CloseAccountInstructionAccounts,
},
FreezeAccount {
program_id: solana_pubkey::Pubkey,
data: FreezeAccount,
accounts: FreezeAccountInstructionAccounts,
},
GetAccountDataSize {
program_id: solana_pubkey::Pubkey,
data: GetAccountDataSize,
accounts: GetAccountDataSizeInstructionAccounts,
},
InitializeAccount {
program_id: solana_pubkey::Pubkey,
data: InitializeAccount,
accounts: InitializeAccountInstructionAccounts,
},
InitializeAccount2 {
program_id: solana_pubkey::Pubkey,
data: InitializeAccount2,
accounts: InitializeAccount2InstructionAccounts,
},
InitializeAccount3 {
program_id: solana_pubkey::Pubkey,
data: InitializeAccount3,
accounts: InitializeAccount3InstructionAccounts,
},
InitializeImmutableOwner {
program_id: solana_pubkey::Pubkey,
data: InitializeImmutableOwner,
accounts: InitializeImmutableOwnerInstructionAccounts,
},
InitializeMint {
program_id: solana_pubkey::Pubkey,
data: InitializeMint,
accounts: InitializeMintInstructionAccounts,
},
InitializeMint2 {
program_id: solana_pubkey::Pubkey,
data: InitializeMint2,
accounts: InitializeMint2InstructionAccounts,
},
InitializeMultisig {
program_id: solana_pubkey::Pubkey,
data: InitializeMultisig,
accounts: InitializeMultisigInstructionAccounts,
},
InitializeMultisig2 {
program_id: solana_pubkey::Pubkey,
data: InitializeMultisig2,
accounts: InitializeMultisig2InstructionAccounts,
},
MintTo {
program_id: solana_pubkey::Pubkey,
data: MintTo,
accounts: MintToInstructionAccounts,
},
MintToChecked {
program_id: solana_pubkey::Pubkey,
data: MintToChecked,
accounts: MintToCheckedInstructionAccounts,
},
Revoke {
program_id: solana_pubkey::Pubkey,
data: Revoke,
accounts: RevokeInstructionAccounts,
},
SetAuthority {
program_id: solana_pubkey::Pubkey,
data: SetAuthority,
accounts: SetAuthorityInstructionAccounts,
},
SyncNative {
program_id: solana_pubkey::Pubkey,
data: SyncNative,
accounts: SyncNativeInstructionAccounts,
},
ThawAccount {
program_id: solana_pubkey::Pubkey,
data: ThawAccount,
accounts: ThawAccountInstructionAccounts,
},
Transfer {
program_id: solana_pubkey::Pubkey,
data: Transfer,
accounts: TransferInstructionAccounts,
},
TransferChecked {
program_id: solana_pubkey::Pubkey,
data: TransferChecked,
accounts: TransferCheckedInstructionAccounts,
},
UiAmountToAmount {
program_id: solana_pubkey::Pubkey,
data: UiAmountToAmount,
accounts: UiAmountToAmountInstructionAccounts,
},
UnwrapLamports {
program_id: solana_pubkey::Pubkey,
data: UnwrapLamports,
accounts: UnwrapLamportsInstructionAccounts,
},
WithdrawExcessLamports {
program_id: solana_pubkey::Pubkey,
data: WithdrawExcessLamports,
accounts: WithdrawExcessLamportsInstructionAccounts,
},
}
impl carbon_core::instruction::InstructionDecoder<'_> for TokenProgramDecoder {
type InstructionType = TokenProgramInstruction;
fn decode_instruction(
&self,
instruction: &solana_instruction::Instruction,
) -> Option<Self::InstructionType> {
if instruction.program_id != PROGRAM_ID {
return None;
}
carbon_core::try_decode_instructions!(
instruction,
PROGRAM_ID,
TokenProgramInstruction::AmountToUiAmount => AmountToUiAmount,
TokenProgramInstruction::Approve => Approve,
TokenProgramInstruction::ApproveChecked => ApproveChecked,
TokenProgramInstruction::Batch => Batch,
TokenProgramInstruction::Burn => Burn,
TokenProgramInstruction::BurnChecked => BurnChecked,
TokenProgramInstruction::CloseAccount => CloseAccount,
TokenProgramInstruction::FreezeAccount => FreezeAccount,
TokenProgramInstruction::GetAccountDataSize => GetAccountDataSize,
TokenProgramInstruction::InitializeAccount => InitializeAccount,
TokenProgramInstruction::InitializeAccount2 => InitializeAccount2,
TokenProgramInstruction::InitializeAccount3 => InitializeAccount3,
TokenProgramInstruction::InitializeImmutableOwner => InitializeImmutableOwner,
TokenProgramInstruction::InitializeMint => InitializeMint,
TokenProgramInstruction::InitializeMint2 => InitializeMint2,
TokenProgramInstruction::InitializeMultisig => InitializeMultisig,
TokenProgramInstruction::InitializeMultisig2 => InitializeMultisig2,
TokenProgramInstruction::MintTo => MintTo,
TokenProgramInstruction::MintToChecked => MintToChecked,
TokenProgramInstruction::Revoke => Revoke,
TokenProgramInstruction::SetAuthority => SetAuthority,
TokenProgramInstruction::SyncNative => SyncNative,
TokenProgramInstruction::ThawAccount => ThawAccount,
TokenProgramInstruction::Transfer => Transfer,
TokenProgramInstruction::TransferChecked => TransferChecked,
TokenProgramInstruction::UiAmountToAmount => UiAmountToAmount,
TokenProgramInstruction::UnwrapLamports => UnwrapLamports,
TokenProgramInstruction::WithdrawExcessLamports => WithdrawExcessLamports,
)
}
}