use crate::error::{Error, Result};
use crate::sys;
use std::time::Duration;
pub fn now_ns() -> u64 {
unsafe { sys::llam_now_ns() }
}
pub fn deadline_after(duration: Duration) -> u64 {
now_ns().saturating_add(duration.as_nanos().min(u128::from(u64::MAX)) as u64)
}
pub fn sleep(duration: Duration) -> Result<()> {
let ns = duration.as_nanos().min(u128::from(u64::MAX)) as u64;
let rc = unsafe { sys::llam_sleep_ns(ns) };
if rc == 0 {
Ok(())
} else {
Err(Error::last())
}
}
pub fn sleep_until(deadline_ns: u64) -> Result<()> {
let rc = unsafe { sys::llam_sleep_until(deadline_ns) };
if rc == 0 {
Ok(())
} else {
Err(Error::last())
}
}