use std::sync::Mutex;
use std::thread;
use std::time::Duration;
use js::rust::{JSEngine, JSEngineHandle};
static JS_ENGINE: Mutex<Option<JSEngineHandle>> = Mutex::new(None);
pub(crate) fn current_js_engine_handle() -> JSEngineHandle {
JS_ENGINE.lock().unwrap().as_ref().unwrap().clone()
}
pub struct JSEngineSetup(JSEngine);
impl Default for JSEngineSetup {
fn default() -> Self {
let engine = JSEngine::init().unwrap();
*JS_ENGINE.lock().unwrap() = Some(engine.handle());
Self(engine)
}
}
impl Drop for JSEngineSetup {
fn drop(&mut self) {
*JS_ENGINE.lock().unwrap() = None;
while !self.0.can_shutdown() {
thread::sleep(Duration::from_millis(50));
}
}
}