use crate::{JupiterDcaDecoder, PROGRAM_ID};
#[cfg(feature = "postgres")]
pub mod postgres;
#[cfg(feature = "graphql")]
pub mod graphql;
pub mod close_dca;
pub mod cpi_event;
pub mod deposit;
pub mod end_and_close;
pub mod fulfill_dlmm_fill;
pub mod fulfill_flash_fill;
pub mod initiate_dlmm_fill;
pub mod initiate_flash_fill;
pub mod open_dca;
pub mod open_dca_v2;
pub mod transfer;
pub mod withdraw;
pub mod withdraw_fees;
pub use self::{
close_dca::*, cpi_event::*, deposit::*, end_and_close::*, fulfill_dlmm_fill::*,
fulfill_flash_fill::*, initiate_dlmm_fill::*, initiate_flash_fill::*, open_dca::*,
open_dca_v2::*, transfer::*, withdraw::*, withdraw_fees::*,
};
#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
pub enum JupiterDcaInstruction {
CloseDca {
program_id: solana_pubkey::Pubkey,
data: CloseDca,
accounts: CloseDcaInstructionAccounts,
},
Deposit {
program_id: solana_pubkey::Pubkey,
data: Deposit,
accounts: DepositInstructionAccounts,
},
EndAndClose {
program_id: solana_pubkey::Pubkey,
data: EndAndClose,
accounts: EndAndCloseInstructionAccounts,
},
FulfillDlmmFill {
program_id: solana_pubkey::Pubkey,
data: FulfillDlmmFill,
accounts: FulfillDlmmFillInstructionAccounts,
},
FulfillFlashFill {
program_id: solana_pubkey::Pubkey,
data: FulfillFlashFill,
accounts: FulfillFlashFillInstructionAccounts,
},
InitiateDlmmFill {
program_id: solana_pubkey::Pubkey,
data: InitiateDlmmFill,
accounts: InitiateDlmmFillInstructionAccounts,
},
InitiateFlashFill {
program_id: solana_pubkey::Pubkey,
data: InitiateFlashFill,
accounts: InitiateFlashFillInstructionAccounts,
},
OpenDca {
program_id: solana_pubkey::Pubkey,
data: OpenDca,
accounts: OpenDcaInstructionAccounts,
},
OpenDcaV2 {
program_id: solana_pubkey::Pubkey,
data: OpenDcaV2,
accounts: OpenDcaV2InstructionAccounts,
},
Transfer {
program_id: solana_pubkey::Pubkey,
data: Transfer,
accounts: TransferInstructionAccounts,
},
Withdraw {
program_id: solana_pubkey::Pubkey,
data: Withdraw,
accounts: WithdrawInstructionAccounts,
},
WithdrawFees {
program_id: solana_pubkey::Pubkey,
data: WithdrawFees,
accounts: WithdrawFeesInstructionAccounts,
},
CpiEvent {
program_id: solana_pubkey::Pubkey,
data: CpiEvent,
accounts: CpiEventInstructionAccounts,
},
}
impl carbon_core::instruction::InstructionDecoder<'_> for JupiterDcaDecoder {
type InstructionType = JupiterDcaInstruction;
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,
JupiterDcaInstruction::CloseDca => CloseDca,
JupiterDcaInstruction::Deposit => Deposit,
JupiterDcaInstruction::EndAndClose => EndAndClose,
JupiterDcaInstruction::FulfillDlmmFill => FulfillDlmmFill,
JupiterDcaInstruction::FulfillFlashFill => FulfillFlashFill,
JupiterDcaInstruction::InitiateDlmmFill => InitiateDlmmFill,
JupiterDcaInstruction::InitiateFlashFill => InitiateFlashFill,
JupiterDcaInstruction::OpenDca => OpenDca,
JupiterDcaInstruction::OpenDcaV2 => OpenDcaV2,
JupiterDcaInstruction::Transfer => Transfer,
JupiterDcaInstruction::Withdraw => Withdraw,
JupiterDcaInstruction::WithdrawFees => WithdrawFees,
JupiterDcaInstruction::CpiEvent => CpiEvent,
)
}
}