carbon-boop-decoder 1.0.0

Boop program 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 {
    AuthorityTransferCancelledEvent(
        events::authority_transfer_cancelled_event::AuthorityTransferCancelledEventEvent,
    ),
    AuthorityTransferCompletedEvent(
        events::authority_transfer_completed_event::AuthorityTransferCompletedEventEvent,
    ),
    AuthorityTransferInitiatedEvent(
        events::authority_transfer_initiated_event::AuthorityTransferInitiatedEventEvent,
    ),
    BondingCurveDeployedEvent(events::bonding_curve_deployed_event::BondingCurveDeployedEventEvent),
    BondingCurveDeployedFallbackEvent(
        events::bonding_curve_deployed_fallback_event::BondingCurveDeployedFallbackEventEvent,
    ),
    BondingCurveVaultClosedEvent(
        events::bonding_curve_vault_closed_event::BondingCurveVaultClosedEventEvent,
    ),
    ConfigUpdatedEvent(events::config_updated_event::ConfigUpdatedEventEvent),
    LiquidityDepositedIntoRaydiumEvent(
        events::liquidity_deposited_into_raydium_event::LiquidityDepositedIntoRaydiumEventEvent,
    ),
    OperatorsAddedEvent(events::operators_added_event::OperatorsAddedEventEvent),
    OperatorsRemovedEvent(events::operators_removed_event::OperatorsRemovedEventEvent),
    PausedToggledEvent(events::paused_toggled_event::PausedToggledEventEvent),
    PostGraduationTradingFeesSplitEvent(
        events::post_graduation_trading_fees_split_event::PostGraduationTradingFeesSplitEventEvent,
    ),
    RaydiumLiquidityLockedEvent(
        events::raydium_liquidity_locked_event::RaydiumLiquidityLockedEventEvent,
    ),
    RaydiumPoolCreatedEvent(events::raydium_pool_created_event::RaydiumPoolCreatedEventEvent),
    RaydiumRandomPoolCreatedEvent(
        events::raydium_random_pool_created_event::RaydiumRandomPoolCreatedEventEvent,
    ),
    SwapSolForTokensOnRaydiumEvent(
        events::swap_sol_for_tokens_on_raydium_event::SwapSolForTokensOnRaydiumEventEvent,
    ),
    SwapTokensForSolOnRaydiumEvent(
        events::swap_tokens_for_sol_on_raydium_event::SwapTokensForSolOnRaydiumEventEvent,
    ),
    TokenBoughtEvent(events::token_bought_event::TokenBoughtEventEvent),
    TokenCreatedEvent(events::token_created_event::TokenCreatedEventEvent),
    TokenCreatedFallbackEvent(events::token_created_fallback_event::TokenCreatedFallbackEventEvent),
    TokenGraduatedEvent(events::token_graduated_event::TokenGraduatedEventEvent),
    TokenSoldEvent(events::token_sold_event::TokenSoldEventEvent),
    TradingFeesCollectedEvent(events::trading_fees_collected_event::TradingFeesCollectedEventEvent),
    TradingFeesCollectedV2Event(
        events::trading_fees_collected_v2_event::TradingFeesCollectedV2EventEvent,
    ),
    TradingFeesSplitEvent(events::trading_fees_split_event::TradingFeesSplitEventEvent),
}

#[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::authority_transfer_cancelled_event::AuthorityTransferCancelledEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::AuthorityTransferCancelledEvent(decoded));
        }
        if let Some(decoded) =
            events::authority_transfer_completed_event::AuthorityTransferCompletedEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::AuthorityTransferCompletedEvent(decoded));
        }
        if let Some(decoded) =
            events::authority_transfer_initiated_event::AuthorityTransferInitiatedEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::AuthorityTransferInitiatedEvent(decoded));
        }
        if let Some(decoded) =
            events::bonding_curve_deployed_event::BondingCurveDeployedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::BondingCurveDeployedEvent(decoded));
        }
        if let Some(decoded) = events::bonding_curve_deployed_fallback_event::BondingCurveDeployedFallbackEventEvent::decode(event_data) {
            return Some(CpiEvent::BondingCurveDeployedFallbackEvent(decoded));
        }
        if let Some(decoded) =
            events::bonding_curve_vault_closed_event::BondingCurveVaultClosedEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::BondingCurveVaultClosedEvent(decoded));
        }
        if let Some(decoded) =
            events::config_updated_event::ConfigUpdatedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::ConfigUpdatedEvent(decoded));
        }
        if let Some(decoded) = events::liquidity_deposited_into_raydium_event::LiquidityDepositedIntoRaydiumEventEvent::decode(event_data) {
            return Some(CpiEvent::LiquidityDepositedIntoRaydiumEvent(decoded));
        }
        if let Some(decoded) =
            events::operators_added_event::OperatorsAddedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::OperatorsAddedEvent(decoded));
        }
        if let Some(decoded) =
            events::operators_removed_event::OperatorsRemovedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::OperatorsRemovedEvent(decoded));
        }
        if let Some(decoded) =
            events::paused_toggled_event::PausedToggledEventEvent::decode(event_data)
        {
            return Some(CpiEvent::PausedToggledEvent(decoded));
        }
        if let Some(decoded) = events::post_graduation_trading_fees_split_event::PostGraduationTradingFeesSplitEventEvent::decode(event_data) {
            return Some(CpiEvent::PostGraduationTradingFeesSplitEvent(decoded));
        }
        if let Some(decoded) =
            events::raydium_liquidity_locked_event::RaydiumLiquidityLockedEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::RaydiumLiquidityLockedEvent(decoded));
        }
        if let Some(decoded) =
            events::raydium_pool_created_event::RaydiumPoolCreatedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::RaydiumPoolCreatedEvent(decoded));
        }
        if let Some(decoded) =
            events::raydium_random_pool_created_event::RaydiumRandomPoolCreatedEventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::RaydiumRandomPoolCreatedEvent(decoded));
        }
        if let Some(decoded) = events::swap_sol_for_tokens_on_raydium_event::SwapSolForTokensOnRaydiumEventEvent::decode(event_data) {
            return Some(CpiEvent::SwapSolForTokensOnRaydiumEvent(decoded));
        }
        if let Some(decoded) = events::swap_tokens_for_sol_on_raydium_event::SwapTokensForSolOnRaydiumEventEvent::decode(event_data) {
            return Some(CpiEvent::SwapTokensForSolOnRaydiumEvent(decoded));
        }
        if let Some(decoded) = events::token_bought_event::TokenBoughtEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TokenBoughtEvent(decoded));
        }
        if let Some(decoded) =
            events::token_created_event::TokenCreatedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TokenCreatedEvent(decoded));
        }
        if let Some(decoded) =
            events::token_created_fallback_event::TokenCreatedFallbackEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TokenCreatedFallbackEvent(decoded));
        }
        if let Some(decoded) =
            events::token_graduated_event::TokenGraduatedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TokenGraduatedEvent(decoded));
        }
        if let Some(decoded) = events::token_sold_event::TokenSoldEventEvent::decode(event_data) {
            return Some(CpiEvent::TokenSoldEvent(decoded));
        }
        if let Some(decoded) =
            events::trading_fees_collected_event::TradingFeesCollectedEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TradingFeesCollectedEvent(decoded));
        }
        if let Some(decoded) =
            events::trading_fees_collected_v2_event::TradingFeesCollectedV2EventEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::TradingFeesCollectedV2Event(decoded));
        }
        if let Some(decoded) =
            events::trading_fees_split_event::TradingFeesSplitEventEvent::decode(event_data)
        {
            return Some(CpiEvent::TradingFeesSplitEvent(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,
        }
    }
}