use crate::types::Field;
use crate::types::Target;
use carbon_core::CarbonDeserialize;
use carbon_core::borsh;
use carbon_core::deserialize::CarbonDeserialize;
use solana_pubkey::Pubkey;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
pub struct BidState {
pub version: u8,
pub bump: [u8; 1],
pub owner: Pubkey,
pub bid_id: Pubkey,
pub target: Target,
pub target_id: Pubkey,
pub field: Option<Field>,
pub field_id: Option<Pubkey>,
pub quantity: u32,
pub filled_quantity: u32,
pub amount: u64,
pub currency: Option<Pubkey>,
pub expiry: i64,
pub private_taker: Option<Pubkey>,
pub maker_broker: Option<Pubkey>,
pub margin: Option<Pubkey>,
pub updated_at: i64,
pub cosigner: Pubkey,
pub rent_payer: Pubkey,
pub reserved: [u8; 8],
pub reserved1: [u8; 16],
pub reserved2: [u8; 32],
}
impl BidState {
pub fn decode(data: &[u8]) -> Option<Self> {
if data.len() < 8 {
return None;
}
let discriminator = &data[0..8];
if discriminator != &[155, 197, 5, 97, 189, 60, 8, 183] {
return None;
}
let data_slice = data;
let data_slice = &data_slice[8..];
Self::deserialize(data_slice)
}
}