carbon-virtuals-decoder 1.0.0

Virtuals Program Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
pub mod buy_row;
pub mod claim_fees_row;
pub mod cpi_event_row;
pub mod create_meteora_pool_row;
pub mod initialize_meteora_accounts_row;
pub mod initialize_row;
pub mod launch_row;
pub mod sell_row;
pub mod update_pool_creator_row;

pub use self::{
    buy_row::*, claim_fees_row::*, cpi_event_row::*, create_meteora_pool_row::*,
    initialize_meteora_accounts_row::*, initialize_row::*, launch_row::*, sell_row::*,
    update_pool_creator_row::*,
};
use super::VirtualsInstruction;

pub struct VirtualsInstructionsMigration;

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

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

    fn operations(&self) -> Vec<Box<dyn sqlx_migrator::Operation<sqlx::Postgres>>> {
        vec![
            Box::new(BuyMigrationOperation),
            Box::new(ClaimFeesMigrationOperation),
            Box::new(CreateMeteoraPoolMigrationOperation),
            Box::new(InitializeMigrationOperation),
            Box::new(InitializeMeteoraAccountsMigrationOperation),
            Box::new(LaunchMigrationOperation),
            Box::new(SellMigrationOperation),
            Box::new(UpdatePoolCreatorMigrationOperation),
            Box::new(CpiEventMigrationOperation),
        ]
    }

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

pub struct VirtualsInstructionWithMetadata(
    pub VirtualsInstruction,
    pub carbon_core::instruction::InstructionMetadata,
    pub Vec<solana_instruction::AccountMeta>,
);

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

#[async_trait::async_trait]
impl carbon_core::postgres::operations::Insert for VirtualsInstructionWithMetadata {
    async fn insert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let VirtualsInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
        match decoded_instruction {
            VirtualsInstruction::Buy { data, .. } => {
                let row = buy_row::BuyRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::ClaimFees { data, .. } => {
                let row = claim_fees_row::ClaimFeesRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::CreateMeteoraPool { data, .. } => {
                let row = create_meteora_pool_row::CreateMeteoraPoolRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Initialize { data, .. } => {
                let row = initialize_row::InitializeRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::InitializeMeteoraAccounts { data, .. } => {
                let row = initialize_meteora_accounts_row::InitializeMeteoraAccountsRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Launch { data, .. } => {
                let row = launch_row::LaunchRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Sell { data, .. } => {
                let row = sell_row::SellRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::UpdatePoolCreator { data, .. } => {
                let row = update_pool_creator_row::UpdatePoolCreatorRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.insert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::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 VirtualsInstructionWithMetadata {
    async fn upsert(&self, pool: &sqlx::PgPool) -> carbon_core::error::CarbonResult<()> {
        let VirtualsInstructionWithMetadata(decoded_instruction, metadata, raw_accounts) = self;
        match decoded_instruction {
            VirtualsInstruction::Buy { data, .. } => {
                let row = buy_row::BuyRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::ClaimFees { data, .. } => {
                let row = claim_fees_row::ClaimFeesRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::CreateMeteoraPool { data, .. } => {
                let row = create_meteora_pool_row::CreateMeteoraPoolRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Initialize { data, .. } => {
                let row = initialize_row::InitializeRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::InitializeMeteoraAccounts { data, .. } => {
                let row = initialize_meteora_accounts_row::InitializeMeteoraAccountsRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Launch { data, .. } => {
                let row = launch_row::LaunchRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::Sell { data, .. } => {
                let row = sell_row::SellRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::UpdatePoolCreator { data, .. } => {
                let row = update_pool_creator_row::UpdatePoolCreatorRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
            VirtualsInstruction::CpiEvent { data, .. } => {
                let row = cpi_event_row::CpiEventRow::from_parts(
                    data.clone(),
                    metadata.clone(),
                    raw_accounts.clone(),
                );
                row.upsert(pool).await?;
                Ok(())
            }
        }
    }
}