carbon-wavebreak-decoder 2.0.0

Wavebreak Program Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct LpHarvest {}

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct LpHarvestInstructionAccounts {
    pub lp_authority: solana_pubkey::Pubkey,
    pub lp_escrow: solana_pubkey::Pubkey,
    pub whirlpool: solana_pubkey::Pubkey,
    pub position: solana_pubkey::Pubkey,
    pub position_token_account: solana_pubkey::Pubkey,
    pub lower_tick_array: solana_pubkey::Pubkey,
    pub upper_tick_array: solana_pubkey::Pubkey,
    pub token_a_mint: solana_pubkey::Pubkey,
    pub token_b_mint: solana_pubkey::Pubkey,
    pub token_a_ata: solana_pubkey::Pubkey,
    pub token_b_ata: solana_pubkey::Pubkey,
    pub token_a_vault: solana_pubkey::Pubkey,
    pub token_b_vault: solana_pubkey::Pubkey,
    pub reward1_mint: solana_pubkey::Pubkey,
    pub reward2_mint: solana_pubkey::Pubkey,
    pub reward3_mint: solana_pubkey::Pubkey,
    pub reward1_ata: solana_pubkey::Pubkey,
    pub reward2_ata: solana_pubkey::Pubkey,
    pub reward3_ata: solana_pubkey::Pubkey,
    pub reward1_vault: solana_pubkey::Pubkey,
    pub reward2_vault: solana_pubkey::Pubkey,
    pub reward3_vault: solana_pubkey::Pubkey,
    pub system_program: solana_pubkey::Pubkey,
    pub token_a_program: solana_pubkey::Pubkey,
    pub token_b_program: solana_pubkey::Pubkey,
    pub reward1_token_program: solana_pubkey::Pubkey,
    pub reward2_token_program: solana_pubkey::Pubkey,
    pub reward3_token_program: solana_pubkey::Pubkey,
    pub ata_program: solana_pubkey::Pubkey,
    pub memo_program: solana_pubkey::Pubkey,
    pub whirlpool_program: solana_pubkey::Pubkey,
    pub remaining: Vec<solana_instruction::AccountMeta>,
}

impl LpHarvest {
    pub fn decode(data: &[u8]) -> Option<Self> {
        if data.is_empty() {
            return None;
        }
        let discriminator = &data[0..1];
        if discriminator != [56] {
            return None;
        }

        let mut data_slice = data;

        data_slice = &data_slice[1..];

        borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
    }
}

impl ArrangeAccounts for LpHarvest {
    type ArrangedAccounts = LpHarvestInstructionAccounts;

    fn arrange_accounts(
        accounts: &[solana_instruction::AccountMeta],
    ) -> Option<Self::ArrangedAccounts> {
        let mut iter = accounts.iter();

        let lp_authority = next_account(&mut iter)?;
        let lp_escrow = next_account(&mut iter)?;
        let whirlpool = next_account(&mut iter)?;
        let position = next_account(&mut iter)?;
        let position_token_account = next_account(&mut iter)?;
        let lower_tick_array = next_account(&mut iter)?;
        let upper_tick_array = next_account(&mut iter)?;
        let token_a_mint = next_account(&mut iter)?;
        let token_b_mint = next_account(&mut iter)?;
        let token_a_ata = next_account(&mut iter)?;
        let token_b_ata = next_account(&mut iter)?;
        let token_a_vault = next_account(&mut iter)?;
        let token_b_vault = next_account(&mut iter)?;
        let reward1_mint = next_account(&mut iter)?;
        let reward2_mint = next_account(&mut iter)?;
        let reward3_mint = next_account(&mut iter)?;
        let reward1_ata = next_account(&mut iter)?;
        let reward2_ata = next_account(&mut iter)?;
        let reward3_ata = next_account(&mut iter)?;
        let reward1_vault = next_account(&mut iter)?;
        let reward2_vault = next_account(&mut iter)?;
        let reward3_vault = next_account(&mut iter)?;
        let system_program = next_account(&mut iter)?;
        let token_a_program = next_account(&mut iter)?;
        let token_b_program = next_account(&mut iter)?;
        let reward1_token_program = next_account(&mut iter)?;
        let reward2_token_program = next_account(&mut iter)?;
        let reward3_token_program = next_account(&mut iter)?;
        let ata_program = next_account(&mut iter)?;
        let memo_program = next_account(&mut iter)?;
        let whirlpool_program = next_account(&mut iter)?;

        let remaining = iter.as_slice();

        Some(LpHarvestInstructionAccounts {
            lp_authority,
            lp_escrow,
            whirlpool,
            position,
            position_token_account,
            lower_tick_array,
            upper_tick_array,
            token_a_mint,
            token_b_mint,
            token_a_ata,
            token_b_ata,
            token_a_vault,
            token_b_vault,
            reward1_mint,
            reward2_mint,
            reward3_mint,
            reward1_ata,
            reward2_ata,
            reward3_ata,
            reward1_vault,
            reward2_vault,
            reward3_vault,
            system_program,
            token_a_program,
            token_b_program,
            reward1_token_program,
            reward2_token_program,
            reward3_token_program,
            ata_program,
            memo_program,
            whirlpool_program,
            remaining: remaining.to_vec(),
        })
    }
}