1use std::sync::OnceLock;
2
3use rusteal_ffi::RustealApiTable;
4
5struct ApiRef(*const RustealApiTable);
6unsafe impl Send for ApiRef {}
7unsafe impl Sync for ApiRef {}
8
9static API: OnceLock<ApiRef> = OnceLock::new();
10
11pub fn init_api(table: *const RustealApiTable) {
12 assert!(!table.is_null(), "init_api called with null pointer");
13
14 if API.set(ApiRef(table)).is_err() {
15 panic!("init_api called more than once");
16 }
17}
18
19#[inline(always)]
20pub fn api() -> &'static RustealApiTable {
21 unsafe { &*API.get().expect("rusteal API not initialized").0 }
22}
23
24#[inline]
25pub fn is_api_initialized() -> bool {
26 API.get().is_some()
27}