use std::sync::OnceLock;
use uika_ffi::UikaApiTable;
struct ApiRef(*const UikaApiTable);
unsafe impl Send for ApiRef {}
unsafe impl Sync for ApiRef {}
static API: OnceLock<ApiRef> = OnceLock::new();
pub fn init_api(table: *const UikaApiTable) {
assert!(!table.is_null(), "init_api called with null pointer");
if API.set(ApiRef(table)).is_err() {
panic!("init_api called more than once");
}
}
#[inline(always)]
pub fn api() -> &'static UikaApiTable {
unsafe { &*API.get().expect("uika API not initialized").0 }
}
#[inline]
pub fn is_api_initialized() -> bool {
API.get().is_some()
}