use hopper_runtime::error::ProgramError;
#[cfg(target_os = "solana")]
extern "C" {
fn sol_remaining_compute_units() -> u64;
}
#[inline(always)]
pub fn remaining_compute_units() -> u64 {
#[cfg(target_os = "solana")]
{
unsafe { sol_remaining_compute_units() }
}
#[cfg(not(target_os = "solana"))]
{
u64::MAX }
}
#[inline(always)]
pub fn check_compute_remaining(min_cu: u64) -> Result<(), ProgramError> {
if remaining_compute_units() < min_cu {
return Err(ProgramError::InvalidArgument);
}
Ok(())
}
#[inline(always)]
pub fn require_compute_remaining(min_cu: u64) -> Result<u64, ProgramError> {
let remaining = remaining_compute_units();
if remaining < min_cu {
return Err(ProgramError::InvalidArgument);
}
Ok(remaining)
}