1use borsh::{BorshDeserialize, BorshSerialize};
2use solana_pubkey::Pubkey;
3
4use crate::KVAULT_PROGRAM_ID;
5
6#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
7pub struct InitObligationArgs {
8 pub tag: u8,
9 pub id: u8,
10}
11
12#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
13pub struct BorrowOrderConfigArgs {
14 pub remaining_debt_amount: u64,
15 pub max_borrow_rate_bps: u32,
16 pub min_debt_term_seconds: u64,
17 pub fillable_until_timestamp: u64,
18}
19
20#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
21pub struct ObligationOrder {
22 pub condition_threshold_sf: u128,
23 pub opportunity_parameter_sf: u128,
24 pub min_execution_bonus_bps: u16,
25 pub max_execution_bonus_bps: u16,
26 pub condition_type: u8,
27 pub opportunity_type: u8,
28 pub padding1: [u8; 10],
29 pub padding2: [u128; 5],
30}
31
32#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, Default, PartialEq, Eq)]
33#[repr(u8)]
34pub enum ProgressCallbackType {
35 #[default]
36 None = 0,
37 KlendQueueAccountingHandlerOnKvault = 1,
38}
39
40impl ProgressCallbackType {
41 pub fn program_address(&self) -> Pubkey {
43 match self {
44 ProgressCallbackType::None => Pubkey::default(),
45 ProgressCallbackType::KlendQueueAccountingHandlerOnKvault => KVAULT_PROGRAM_ID,
46 }
47 }
48}
49
50#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Default, PartialEq, Eq)]
52pub struct ReserveConfigCustomizationArgs {
53 pub override_fixed_rate_bps: u8,
55 pub fixed_borrow_rate_bps: u32,
57 pub override_debt_term_seconds: u8,
59 pub debt_term_seconds: u64,
61 pub clear_elevation_groups: u8,
63}
64
65#[derive(BorshSerialize, BorshDeserialize, Clone, Copy, Debug, PartialEq, Eq)]
67#[repr(u8)]
68pub enum UpdateObligationConfigMode {
69 FixedTermRolloverEnabled = 0,
70 FixedTermRolloverMaxBorrowRateBps = 1,
71 FixedTermRolloverMinDebtTermSeconds = 2,
72 FixedTermRolloverOpenTermAllowed = 3,
73 MigrationToFixedEnabled = 4,
74}