carbon-gavel-decoder 1.0.0

Gavel Pool Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
use crate::{GavelDecoder, PROGRAM_ID};

#[cfg(feature = "postgres")]
pub mod postgres;

#[cfg(feature = "graphql")]
pub mod graphql;

pub mod add_liquidity;
pub mod initialize_lp_position;
pub mod initialize_pool;
pub mod log;
pub mod remove_liquidity;
pub mod renounce_liquidity;
pub mod swap;
pub mod transfer_liquidity;
pub mod withdraw_lp_fees;
pub mod withdraw_protocol_fees;

pub use self::{
    add_liquidity::*, initialize_lp_position::*, initialize_pool::*, log::*, remove_liquidity::*,
    renounce_liquidity::*, swap::*, transfer_liquidity::*, withdraw_lp_fees::*,
    withdraw_protocol_fees::*,
};

#[derive(Debug, Clone, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(tag = "type", content = "data"))]
pub enum GavelInstruction {
    AddLiquidity {
        program_id: solana_pubkey::Pubkey,
        data: AddLiquidity,
        accounts: AddLiquidityInstructionAccounts,
    },
    InitializeLpPosition {
        program_id: solana_pubkey::Pubkey,
        data: InitializeLpPosition,
        accounts: InitializeLpPositionInstructionAccounts,
    },
    InitializePool {
        program_id: solana_pubkey::Pubkey,
        data: InitializePool,
        accounts: InitializePoolInstructionAccounts,
    },
    Log {
        program_id: solana_pubkey::Pubkey,
        data: Log,
        accounts: LogInstructionAccounts,
    },
    RemoveLiquidity {
        program_id: solana_pubkey::Pubkey,
        data: RemoveLiquidity,
        accounts: RemoveLiquidityInstructionAccounts,
    },
    RenounceLiquidity {
        program_id: solana_pubkey::Pubkey,
        data: RenounceLiquidity,
        accounts: RenounceLiquidityInstructionAccounts,
    },
    Swap {
        program_id: solana_pubkey::Pubkey,
        data: Swap,
        accounts: SwapInstructionAccounts,
    },
    TransferLiquidity {
        program_id: solana_pubkey::Pubkey,
        data: TransferLiquidity,
        accounts: TransferLiquidityInstructionAccounts,
    },
    WithdrawLpFees {
        program_id: solana_pubkey::Pubkey,
        data: WithdrawLpFees,
        accounts: WithdrawLpFeesInstructionAccounts,
    },
    WithdrawProtocolFees {
        program_id: solana_pubkey::Pubkey,
        data: WithdrawProtocolFees,
        accounts: WithdrawProtocolFeesInstructionAccounts,
    },
}

impl carbon_core::instruction::InstructionDecoder<'_> for GavelDecoder {
    type InstructionType = GavelInstruction;

    fn decode_instruction(
        &self,
        instruction: &solana_instruction::Instruction,
    ) -> Option<Self::InstructionType> {
        if instruction.program_id != PROGRAM_ID {
            return None;
        }

        carbon_core::try_decode_instructions!(
            instruction,
            PROGRAM_ID,
            GavelInstruction::AddLiquidity => AddLiquidity,
            GavelInstruction::InitializeLpPosition => InitializeLpPosition,
            GavelInstruction::InitializePool => InitializePool,
            GavelInstruction::Log => Log,
            GavelInstruction::RemoveLiquidity => RemoveLiquidity,
            GavelInstruction::RenounceLiquidity => RenounceLiquidity,
            GavelInstruction::Swap => Swap,
            GavelInstruction::TransferLiquidity => TransferLiquidity,
            GavelInstruction::WithdrawLpFees => WithdrawLpFees,
            GavelInstruction::WithdrawProtocolFees => WithdrawProtocolFees,
        )
    }
}