carbon-jupiter-lend-decoder 2.0.0

Jupiter Lend Liquidity 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 {
    LogBorrowRateCap(events::log_borrow_rate_cap::LogBorrowRateCapEvent),
    LogChangeStatus(events::log_change_status::LogChangeStatusEvent),
    LogClaim(events::log_claim::LogClaimEvent),
    LogCollectRevenue(events::log_collect_revenue::LogCollectRevenueEvent),
    LogOperate(events::log_operate::LogOperateEvent),
    LogPauseUser(events::log_pause_user::LogPauseUserEvent),
    LogUnpauseUser(events::log_unpause_user::LogUnpauseUserEvent),
    LogUpdateAuthority(events::log_update_authority::LogUpdateAuthorityEvent),
    LogUpdateAuths(events::log_update_auths::LogUpdateAuthsEvent),
    LogUpdateExchangePrices(events::log_update_exchange_prices::LogUpdateExchangePricesEvent),
    LogUpdateGuardians(events::log_update_guardians::LogUpdateGuardiansEvent),
    LogUpdateRateDataV1(events::log_update_rate_data_v1::LogUpdateRateDataV1Event),
    LogUpdateRateDataV2(events::log_update_rate_data_v2::LogUpdateRateDataV2Event),
    LogUpdateRevenueCollector(events::log_update_revenue_collector::LogUpdateRevenueCollectorEvent),
    LogUpdateTokenConfigs(events::log_update_token_configs::LogUpdateTokenConfigsEvent),
    LogUpdateUserBorrowConfigs(
        events::log_update_user_borrow_configs::LogUpdateUserBorrowConfigsEvent,
    ),
    LogUpdateUserClass(events::log_update_user_class::LogUpdateUserClassEvent),
    LogUpdateUserSupplyConfigs(
        events::log_update_user_supply_configs::LogUpdateUserSupplyConfigsEvent,
    ),
    LogUpdateUserWithdrawalLimit(
        events::log_update_user_withdrawal_limit::LogUpdateUserWithdrawalLimitEvent,
    ),
}

#[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::log_borrow_rate_cap::LogBorrowRateCapEvent::decode(event_data)
        {
            return Some(CpiEvent::LogBorrowRateCap(decoded));
        }
        if let Some(decoded) = events::log_change_status::LogChangeStatusEvent::decode(event_data) {
            return Some(CpiEvent::LogChangeStatus(decoded));
        }
        if let Some(decoded) = events::log_claim::LogClaimEvent::decode(event_data) {
            return Some(CpiEvent::LogClaim(decoded));
        }
        if let Some(decoded) =
            events::log_collect_revenue::LogCollectRevenueEvent::decode(event_data)
        {
            return Some(CpiEvent::LogCollectRevenue(decoded));
        }
        if let Some(decoded) = events::log_operate::LogOperateEvent::decode(event_data) {
            return Some(CpiEvent::LogOperate(decoded));
        }
        if let Some(decoded) = events::log_pause_user::LogPauseUserEvent::decode(event_data) {
            return Some(CpiEvent::LogPauseUser(decoded));
        }
        if let Some(decoded) = events::log_unpause_user::LogUnpauseUserEvent::decode(event_data) {
            return Some(CpiEvent::LogUnpauseUser(decoded));
        }
        if let Some(decoded) =
            events::log_update_authority::LogUpdateAuthorityEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateAuthority(decoded));
        }
        if let Some(decoded) = events::log_update_auths::LogUpdateAuthsEvent::decode(event_data) {
            return Some(CpiEvent::LogUpdateAuths(decoded));
        }
        if let Some(decoded) =
            events::log_update_exchange_prices::LogUpdateExchangePricesEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateExchangePrices(decoded));
        }
        if let Some(decoded) =
            events::log_update_guardians::LogUpdateGuardiansEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateGuardians(decoded));
        }
        if let Some(decoded) =
            events::log_update_rate_data_v1::LogUpdateRateDataV1Event::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateRateDataV1(decoded));
        }
        if let Some(decoded) =
            events::log_update_rate_data_v2::LogUpdateRateDataV2Event::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateRateDataV2(decoded));
        }
        if let Some(decoded) =
            events::log_update_revenue_collector::LogUpdateRevenueCollectorEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateRevenueCollector(decoded));
        }
        if let Some(decoded) =
            events::log_update_token_configs::LogUpdateTokenConfigsEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateTokenConfigs(decoded));
        }
        if let Some(decoded) =
            events::log_update_user_borrow_configs::LogUpdateUserBorrowConfigsEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::LogUpdateUserBorrowConfigs(decoded));
        }
        if let Some(decoded) =
            events::log_update_user_class::LogUpdateUserClassEvent::decode(event_data)
        {
            return Some(CpiEvent::LogUpdateUserClass(decoded));
        }
        if let Some(decoded) =
            events::log_update_user_supply_configs::LogUpdateUserSupplyConfigsEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::LogUpdateUserSupplyConfigs(decoded));
        }
        if let Some(decoded) =
            events::log_update_user_withdrawal_limit::LogUpdateUserWithdrawalLimitEvent::decode(
                event_data,
            )
        {
            return Some(CpiEvent::LogUpdateUserWithdrawalLimit(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,
        }
    }
}