use deno_core::op2;
use deno_core::OpState;
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::Arc;
#[derive(Clone, Default)]
pub struct NavSignal(pub Arc<AtomicBool>);
impl NavSignal {
pub fn new() -> Self {
Self(Arc::new(AtomicBool::new(false)))
}
pub fn raise(&self) {
self.0.store(true, Ordering::Relaxed);
}
pub fn pending(&self) -> bool {
self.0.load(Ordering::Relaxed)
}
pub fn reset(&self) {
self.0.store(false, Ordering::Relaxed);
}
}
#[op2(fast)]
pub fn op_set_pending_nav(s: &mut OpState) {
let s = s.borrow::<NavSignal>();
s.raise();
}
deno_core::extension!(nav_extension, ops = [op_set_pending_nav],);