#![deny(unused_must_use)]
#![deny(clippy::all)]
#![allow(clippy::bool_assert_comparison)]
#![allow(non_camel_case_types)]
#![allow(clippy::too_many_arguments)]
pub mod config;
pub mod lending;
pub mod math;
pub mod pyth;
pub mod tag;
pub mod traits;
pub mod vaults;
use anchor_lang::solana_program::pubkey::Pubkey;
pub const DEFAULT_KEY: Pubkey = Pubkey::new_from_array([
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
]);
#[macro_export]
macro_rules! msg_panic {
($($args:tt)+) => {{
use anchor_lang::solana_program::msg;
msg!("RUNTIME ERROR: {}", format_args!($($args)*));
panic!("RUNTIME ERROR: {}", format_args!($($args)*));
}};
}
#[macro_export]
macro_rules! sum {
($($args:expr),*) => {{
let result = 0;
$(
let result = result + std::mem::size_of_val(&$args);
)*
result
}}
}
#[macro_export]
macro_rules! msg_trace {
($($args:tt)+) => {
use anchor_lang::solana_program::msg;
let file_name = std::path::Path::new(file!()).file_name().unwrap().to_string_lossy();
let input_sizes = sum!($($args)*);
if input_sizes > 512 {
msg!("{}", format!("'{}', '{}:{}", format!($($args)*), file_name, line!()).as_str());
} else {
use tulip_arrform::{arrform, ArrForm};
let file_info = arrform!(256, "{}:{}", file_name, line!());
let msg_part = arrform!(512, $($args)*);
msg!("'{}', {}", msg_part.as_str(), file_info.as_str());
}
};
}
#[cfg(test)]
mod test {
use super::*;
use anchor_lang::solana_program::msg;
#[test]
fn default_key() {
assert_eq!(DEFAULT_KEY, Pubkey::default());
}
#[test]
fn test_size_ofs() {
println!("{}", sum!("y", "o", "bbbbbb"));
}
#[test]
fn test_trace() {
msg_trace!("hello world this is {}", "very big message");
}
}