Skip to main content

rusteal_core/
api.rs

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}