carbon-meteora-dbc-decoder 1.0.0

Meteora DBC Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.

pub use super::super::events;
use carbon_core::{borsh, deserialize::ArrangeAccounts};

#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(
    Debug,
    Clone,
    carbon_core::borsh::BorshSerialize,
    carbon_core::borsh::BorshDeserialize,
    PartialEq,
)]
pub enum CpiEvent {
    EvtClaimCreatorTradingFee(events::evt_claim_creator_trading_fee::EvtClaimCreatorTradingFeeEvent),
    EvtClaimPoolCreationFee(events::evt_claim_pool_creation_fee::EvtClaimPoolCreationFeeEvent),
    EvtClaimProtocolFee(events::evt_claim_protocol_fee::EvtClaimProtocolFeeEvent),
    EvtClaimProtocolLiquidityMigrationFee(events::evt_claim_protocol_liquidity_migration_fee::EvtClaimProtocolLiquidityMigrationFeeEvent),
    EvtClaimTradingFee(events::evt_claim_trading_fee::EvtClaimTradingFeeEvent),
    EvtCloseClaimFeeOperator(events::evt_close_claim_fee_operator::EvtCloseClaimFeeOperatorEvent),
    EvtCreateClaimFeeOperator(events::evt_create_claim_fee_operator::EvtCreateClaimFeeOperatorEvent),
    EvtCreateConfig(events::evt_create_config::EvtCreateConfigEvent),
    EvtCreateConfigV2(events::evt_create_config_v2::EvtCreateConfigV2Event),
    EvtCreateMeteoraMigrationMetadata(events::evt_create_meteora_migration_metadata::EvtCreateMeteoraMigrationMetadataEvent),
    EvtCreatorWithdrawSurplus(events::evt_creator_withdraw_surplus::EvtCreatorWithdrawSurplusEvent),
    EvtCurveComplete(events::evt_curve_complete::EvtCurveCompleteEvent),
    EvtInitializePool(events::evt_initialize_pool::EvtInitializePoolEvent),
    EvtPartnerClaimPoolCreationFee(events::evt_partner_claim_pool_creation_fee::EvtPartnerClaimPoolCreationFeeEvent),
    EvtPartnerMetadata(events::evt_partner_metadata::EvtPartnerMetadataEvent),
    EvtPartnerWithdrawMigrationFee(events::evt_partner_withdraw_migration_fee::EvtPartnerWithdrawMigrationFeeEvent),
    EvtPartnerWithdrawSurplus(events::evt_partner_withdraw_surplus::EvtPartnerWithdrawSurplusEvent),
    EvtSwap(events::evt_swap::EvtSwapEvent),
    EvtSwap2(events::evt_swap2::EvtSwap2Event),
    EvtUpdatePoolCreator(events::evt_update_pool_creator::EvtUpdatePoolCreatorEvent),
    EvtVirtualPoolMetadata(events::evt_virtual_pool_metadata::EvtVirtualPoolMetadataEvent),
    EvtWithdrawLeftover(events::evt_withdraw_leftover::EvtWithdrawLeftoverEvent),
    EvtWithdrawMigrationFee(events::evt_withdraw_migration_fee::EvtWithdrawMigrationFeeEvent),
}

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct CpiEventInstructionAccounts {
    pub program: solana_pubkey::Pubkey,
    pub event_authority: solana_pubkey::Pubkey,
    pub remaining: Vec<solana_instruction::AccountMeta>,
}

impl CpiEvent {
    pub fn decode(data: &[u8]) -> Option<Self> {
        if data.len() < 8 {
            return None;
        }
        let discriminator = &data[0..8];
        if discriminator != [228, 69, 165, 46, 81, 203, 154, 29] {
            return None;
        }

        let event_data = &data[8..];

        if let Some(decoded) =
            events::evt_claim_creator_trading_fee::EvtClaimCreatorTradingFeeEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::EvtClaimCreatorTradingFee(decoded));
        }
        if let Some(decoded) =
            events::evt_claim_pool_creation_fee::EvtClaimPoolCreationFeeEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtClaimPoolCreationFee(decoded));
        }
        if let Some(decoded) =
            events::evt_claim_protocol_fee::EvtClaimProtocolFeeEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtClaimProtocolFee(decoded));
        }
        if let Some(decoded) = events::evt_claim_protocol_liquidity_migration_fee::EvtClaimProtocolLiquidityMigrationFeeEvent::decode(event_data) {
            return Some(CpiEvent::EvtClaimProtocolLiquidityMigrationFee(decoded));
        }
        if let Some(decoded) =
            events::evt_claim_trading_fee::EvtClaimTradingFeeEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtClaimTradingFee(decoded));
        }
        if let Some(decoded) =
            events::evt_close_claim_fee_operator::EvtCloseClaimFeeOperatorEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtCloseClaimFeeOperator(decoded));
        }
        if let Some(decoded) =
            events::evt_create_claim_fee_operator::EvtCreateClaimFeeOperatorEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::EvtCreateClaimFeeOperator(decoded));
        }
        if let Some(decoded) = events::evt_create_config::EvtCreateConfigEvent::decode(event_data) {
            return Some(CpiEvent::EvtCreateConfig(decoded));
        }
        if let Some(decoded) =
            events::evt_create_config_v2::EvtCreateConfigV2Event::decode(event_data)
        {
            return Some(CpiEvent::EvtCreateConfigV2(decoded));
        }
        if let Some(decoded) = events::evt_create_meteora_migration_metadata::EvtCreateMeteoraMigrationMetadataEvent::decode(event_data) {
            return Some(CpiEvent::EvtCreateMeteoraMigrationMetadata(decoded));
        }
        if let Some(decoded) =
            events::evt_creator_withdraw_surplus::EvtCreatorWithdrawSurplusEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtCreatorWithdrawSurplus(decoded));
        }
        if let Some(decoded) = events::evt_curve_complete::EvtCurveCompleteEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtCurveComplete(decoded));
        }
        if let Some(decoded) =
            events::evt_initialize_pool::EvtInitializePoolEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtInitializePool(decoded));
        }
        if let Some(decoded) =
            events::evt_partner_claim_pool_creation_fee::EvtPartnerClaimPoolCreationFeeEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::EvtPartnerClaimPoolCreationFee(decoded));
        }
        if let Some(decoded) =
            events::evt_partner_metadata::EvtPartnerMetadataEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtPartnerMetadata(decoded));
        }
        if let Some(decoded) =
            events::evt_partner_withdraw_migration_fee::EvtPartnerWithdrawMigrationFeeEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::EvtPartnerWithdrawMigrationFee(decoded));
        }
        if let Some(decoded) =
            events::evt_partner_withdraw_surplus::EvtPartnerWithdrawSurplusEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtPartnerWithdrawSurplus(decoded));
        }
        if let Some(decoded) = events::evt_swap::EvtSwapEvent::decode(event_data) {
            return Some(CpiEvent::EvtSwap(decoded));
        }
        if let Some(decoded) = events::evt_swap2::EvtSwap2Event::decode(event_data) {
            return Some(CpiEvent::EvtSwap2(decoded));
        }
        if let Some(decoded) =
            events::evt_update_pool_creator::EvtUpdatePoolCreatorEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtUpdatePoolCreator(decoded));
        }
        if let Some(decoded) =
            events::evt_virtual_pool_metadata::EvtVirtualPoolMetadataEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtVirtualPoolMetadata(decoded));
        }
        if let Some(decoded) =
            events::evt_withdraw_leftover::EvtWithdrawLeftoverEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtWithdrawLeftover(decoded));
        }
        if let Some(decoded) =
            events::evt_withdraw_migration_fee::EvtWithdrawMigrationFeeEvent::decode(event_data)
        {
            return Some(CpiEvent::EvtWithdrawMigrationFee(decoded));
        }
        None
    }
}

impl ArrangeAccounts for CpiEvent {
    type ArrangedAccounts = CpiEventInstructionAccounts;

    fn arrange_accounts(
        accounts: &[solana_instruction::AccountMeta],
    ) -> Option<Self::ArrangedAccounts> {
        match accounts {
            [program, event_authority, remaining @ ..] => Some(CpiEventInstructionAccounts {
                program: program.pubkey,
                event_authority: event_authority.pubkey,
                remaining: remaining.to_vec(),
            }),
            [event_authority] => Some(CpiEventInstructionAccounts {
                program: crate::PROGRAM_ID,
                event_authority: event_authority.pubkey,
                remaining: Vec::new(),
            }),
            _ => None,
        }
    }
}