use libuv_sys2::uv_loop_t;
use luajit_bindings::ffi::lua_State;
use once_cell::unsync::OnceCell;
thread_local! {
static LOOP: OnceCell<*mut uv_loop_t> = OnceCell::new();
}
extern "C" {
fn luv_loop(lua_state: *mut lua_State) -> *mut uv_loop_t;
}
#[doc(hidden)]
pub unsafe fn init(lua_state: *mut lua_State) {
LOOP.with(|uv_loop| uv_loop.set(luv_loop(lua_state))).unwrap_unchecked();
}
pub(crate) unsafe fn with_loop<F, R>(fun: F) -> R
where
F: FnOnce(*mut uv_loop_t) -> R,
{
LOOP.with(move |uv_loop| fun(*uv_loop.get().unwrap_unchecked()))
}