carbon-zeta-decoder 2.0.0

Zeta Program Decoder
Documentation
//! This code was AUTOGENERATED using the Codama library.
use {crate::types::HaltStateV2, solana_pubkey::Pubkey};

#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct State {
    pub admin: Pubkey,
    pub state_nonce: u8,
    pub serum_nonce: u8,
    pub mint_auth_nonce: u8,
    pub num_underlyings: u8,
    pub num_flex_underlyings: u8,
    pub null: [u8; 7],
    pub strike_initialization_threshold_seconds: u32,
    pub pricing_frequency_seconds: u32,
    pub liquidator_liquidation_percentage: u32,
    pub insurance_vault_liquidation_percentage: u32,
    pub native_d1_trade_fee_percentage: u64,
    pub native_d1_underlying_fee_percentage: u64,
    pub native_whitelist_underlying_fee_percentage: u64,
    pub native_deposit_limit: u64,
    pub expiration_threshold_seconds: u32,
    pub position_movement_fee_bps: u8,
    pub margin_concession_percentage: u8,
    pub treasury_wallet_nonce: u8,
    pub native_option_trade_fee_percentage: u64,
    pub native_option_underlying_fee_percentage: u64,
    pub referrals_admin: Pubkey,
    pub referrals_rewards_wallet_nonce: u8,
    pub max_perp_delta_age: u16,
    pub secondary_admin: Pubkey,
    pub vault_nonce: u8,
    pub insurance_vault_nonce: u8,
    pub deprecated_total_insurance_vault_deposits: u64,
    pub native_withdraw_limit: u64,
    pub withdraw_limit_epoch_seconds: u32,
    pub native_open_interest_limit: u64,
    pub halt_states: [HaltStateV2; 5],
    pub halt_states_padding: [HaltStateV2; 20],
    #[cfg_attr(feature = "serde", serde(with = "serde_big_array::BigArray"))]
    pub padding: [u8; 338],
}

impl State {
    pub fn decode(data: &[u8]) -> Option<Self> {
        if data.len() < 8 {
            return None;
        }
        let discriminator = &data[0..8];
        if discriminator != [216, 146, 107, 94, 104, 75, 182, 177] {
            return None;
        }

        let mut data_slice = data;

        data_slice = &data_slice[8..];

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