use solana_pubkey::Pubkey;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct Dca {
pub user: Pubkey,
pub input_mint: Pubkey,
pub output_mint: Pubkey,
pub idx: u64,
pub next_cycle_at: i64,
pub in_deposited: u64,
pub in_withdrawn: u64,
pub out_withdrawn: u64,
pub in_used: u64,
pub out_received: u64,
pub in_amount_per_cycle: u64,
pub cycle_frequency: i64,
pub next_cycle_amount_left: u64,
pub in_account: Pubkey,
pub out_account: Pubkey,
pub min_out_amount: u64,
pub max_out_amount: u64,
pub keeper_in_balance_before_borrow: u64,
pub dca_out_balance_before_swap: u64,
pub created_at: i64,
pub bump: u8,
}
impl Dca {
pub fn decode(data: &[u8]) -> Option<Self> {
if data.len() < 8 {
return None;
}
let discriminator = &data[0..8];
if discriminator != [82, 93, 90, 127, 40, 101, 145, 154] {
return None;
}
let mut data_slice = data;
data_slice = &data_slice[8..];
borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
}
}