mod last_update;
mod lending_market;
mod obligation;
mod reserve;
pub use last_update::*;
pub use lending_market::*;
pub use obligation::*;
pub use reserve::*;
use crate::math::{Decimal, WAD};
use solana_program::{msg, program_error::ProgramError};
pub const INITIAL_COLLATERAL_RATIO: u64 = 1;
const INITIAL_COLLATERAL_RATE: u64 = INITIAL_COLLATERAL_RATIO * WAD;
pub const PROGRAM_VERSION: u8 = 1;
pub const UNINITIALIZED_VERSION: u8 = 0;
pub const SLOTS_PER_YEAR: u64 = 63072000;
fn pack_decimal(decimal: Decimal, dst: &mut [u8; 16]) {
*dst = decimal
.to_scaled_val()
.expect("Decimal cannot be packed")
.to_le_bytes();
}
fn unpack_decimal(src: &[u8; 16]) -> Decimal {
Decimal::from_scaled_val(u128::from_le_bytes(*src))
}
fn pack_bool(boolean: bool, dst: &mut [u8; 1]) {
*dst = (boolean as u8).to_le_bytes()
}
fn unpack_bool(src: &[u8; 1]) -> Result<bool, ProgramError> {
match u8::from_le_bytes(*src) {
0 => Ok(false),
1 => Ok(true),
_ => {
msg!("Boolean cannot be unpacked");
Err(ProgramError::InvalidAccountData)
}
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn initial_collateral_rate_sanity() {
assert_eq!(
INITIAL_COLLATERAL_RATIO.checked_mul(WAD).unwrap(),
INITIAL_COLLATERAL_RATE
);
}
}