carbon-jupiter-dca-decoder 2.0.0

Jupiter DCA Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
pub mod close_dca_row;
pub mod cpi_event_row;
pub mod deposit_row;
pub mod end_and_close_row;
pub mod fulfill_dlmm_fill_row;
pub mod fulfill_flash_fill_row;
pub mod initiate_dlmm_fill_row;
pub mod initiate_flash_fill_row;
pub mod open_dca_row;
pub mod open_dca_v2_row;
pub mod transfer_row;
pub mod withdraw_fees_row;
pub mod withdraw_row;

pub use self::{
    close_dca_row::*, cpi_event_row::*, deposit_row::*, end_and_close_row::*,
    fulfill_dlmm_fill_row::*, fulfill_flash_fill_row::*, initiate_dlmm_fill_row::*,
    initiate_flash_fill_row::*, open_dca_row::*, open_dca_v2_row::*, transfer_row::*,
    withdraw_fees_row::*, withdraw_row::*,
};
use super::JupiterDcaInstruction;

pub struct JupiterDcaInstructionsMigration;

impl sqlx_migrator::Migration<sqlx::Postgres> for JupiterDcaInstructionsMigration {
    fn app(&self) -> &str {
        "jupiter-dca"
    }

    fn name(&self) -> &str {
        "jupiter_dca_instructions"
    }

    fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
        vec![
            Box::new(CloseDcaMigrationOperation),
            Box::new(DepositMigrationOperation),
            Box::new(EndAndCloseMigrationOperation),
            Box::new(FulfillDlmmFillMigrationOperation),
            Box::new(FulfillFlashFillMigrationOperation),
            Box::new(InitiateDlmmFillMigrationOperation),
            Box::new(InitiateFlashFillMigrationOperation),
            Box::new(OpenDcaMigrationOperation),
            Box::new(OpenDcaV2MigrationOperation),
            Box::new(TransferMigrationOperation),
            Box::new(WithdrawMigrationOperation),
            Box::new(WithdrawFeesMigrationOperation),
            Box::new(CpiEventMigrationOperation),
        ]
    }

    fn parents(&self) -> Vec<Box<dyn sqlx_migrator::Migration<sqlx::Postgres>>> {
        vec![]
    }
}

pub struct JupiterDcaInstructionWithMetadata(
    pub JupiterDcaInstruction,
    pub carbon_core::instruction::InstructionMetadata,
    pub Vec<solana_instruction::AccountMeta>,
);

impl
    From<(
        JupiterDcaInstruction,
        carbon_core::instruction::InstructionMetadata,
        Vec<solana_instruction::AccountMeta>,
    )> for JupiterDcaInstructionWithMetadata
{
    fn from(
        value: (
            JupiterDcaInstruction,
            carbon_core::instruction::InstructionMetadata,
            Vec<solana_instruction::AccountMeta>,
        ),
    ) -> Self {
        JupiterDcaInstructionWithMetadata(value.0, value.1, value.2)
    }
}

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for JupiterDcaInstructionWithMetadata {
    async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let JupiterDcaInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
        match decoded_instruction {
            JupiterDcaInstruction::OpenDca { data, .. } => {
                let row = open_dca_row::OpenDcaRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::OpenDcaV2 { data, .. } => {
                let row = open_dca_v2_row::OpenDcaV2Row::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::CloseDca { data, .. } => {
                let row = close_dca_row::CloseDcaRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Withdraw { data, .. } => {
                let row = withdraw_row::WithdrawRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Deposit { data, .. } => {
                let row = deposit_row::DepositRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::WithdrawFees { data, .. } => {
                let row = withdraw_fees_row::WithdrawFeesRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::InitiateFlashFill { data, .. } => {
                let row = initiate_flash_fill_row::InitiateFlashFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::FulfillFlashFill { data, .. } => {
                let row = fulfill_flash_fill_row::FulfillFlashFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::InitiateDlmmFill { data, .. } => {
                let row = initiate_dlmm_fill_row::InitiateDlmmFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::FulfillDlmmFill { data, .. } => {
                let row = fulfill_dlmm_fill_row::FulfillDlmmFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Transfer { data, .. } => {
                let row = transfer_row::TransferRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::EndAndClose { data, .. } => {
                let row = end_and_close_row::EndAndCloseRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::CpiEvent { data, .. } => {
                let row = cpi_event_row::CpiEventRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
        }
    }
}

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Upsert for JupiterDcaInstructionWithMetadata {
    async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let JupiterDcaInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
        match decoded_instruction {
            JupiterDcaInstruction::OpenDca { data, .. } => {
                let row = open_dca_row::OpenDcaRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::OpenDcaV2 { data, .. } => {
                let row = open_dca_v2_row::OpenDcaV2Row::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::CloseDca { data, .. } => {
                let row = close_dca_row::CloseDcaRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Withdraw { data, .. } => {
                let row = withdraw_row::WithdrawRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Deposit { data, .. } => {
                let row = deposit_row::DepositRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::WithdrawFees { data, .. } => {
                let row = withdraw_fees_row::WithdrawFeesRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::InitiateFlashFill { data, .. } => {
                let row = initiate_flash_fill_row::InitiateFlashFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::FulfillFlashFill { data, .. } => {
                let row = fulfill_flash_fill_row::FulfillFlashFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::InitiateDlmmFill { data, .. } => {
                let row = initiate_dlmm_fill_row::InitiateDlmmFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::FulfillDlmmFill { data, .. } => {
                let row = fulfill_dlmm_fill_row::FulfillDlmmFillRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::Transfer { data, .. } => {
                let row = transfer_row::TransferRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::EndAndClose { data, .. } => {
                let row = end_and_close_row::EndAndCloseRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            JupiterDcaInstruction::CpiEvent { data, .. } => {
                let row = cpi_event_row::CpiEventRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
        }
    }
}