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,
}
}
}