use serde::{Deserialize, Serialize};
use solana_pubkey::Pubkey;
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Vault {
pub owner: Vec<u8>,
pub bump: u8,
pub spend_limit_per_transaction: u64,
pub spend_limit_per_timeframe: u64,
pub remaining_spend_limit_per_timeframe: u64,
pub next_timeframe_reset_timestamp: u64,
pub timeframe_in_seconds: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
pub struct TimeLock {
pub owner: Pubkey,
pub payer: Pubkey,
pub release_slot: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[repr(u8)]
pub enum ProtocolId {
Drift = 0,
Kamino = 1,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
pub struct WithdrawOrderAccount {
pub time_lock: TimeLock,
pub protocol_id: ProtocolId,
pub asset_id: u16,
pub amount_base_units: u64,
pub reduce_only: bool,
pub destination: Pubkey,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
#[serde(rename_all(serialize = "camelCase", deserialize = "snake_case"))]
pub struct SpendLimitsOrderAccount {
pub time_lock: TimeLock,
pub spend_limit_per_transaction: u64,
pub spend_limit_per_timeframe: u64,
pub timeframe_in_seconds: u64,
pub next_timeframe_reset_timestamp: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct DepositAddressSplAccount {
pub mint: Pubkey,
pub owner: Pubkey,
pub amount: u64,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct DepositAddressSolAccount {
pub lamports: u64,
}