diff options
Diffstat (limited to 'core/extensions.rs')
-rw-r--r-- | core/extensions.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/core/extensions.rs b/core/extensions.rs index ae4537af4..10de66dd2 100644 --- a/core/extensions.rs +++ b/core/extensions.rs @@ -14,6 +14,18 @@ pub type OpEventLoopFn = dyn Fn(&mut OpState, &mut Context) -> bool; pub struct OpDecl { pub name: &'static str, pub v8_fn_ptr: OpFnRef, + pub enabled: bool, + pub is_async: bool, // TODO(@AaronO): enum sync/async/fast ? +} + +impl OpDecl { + pub fn enabled(self, enabled: bool) -> Self { + Self { enabled, ..self } + } + + pub fn disable(self) -> Self { + self.enabled(false) + } } #[derive(Default)] @@ -24,6 +36,7 @@ pub struct Extension { middleware_fn: Option<Box<OpMiddlewareFn>>, event_loop_middleware: Option<Box<OpEventLoopFn>>, initialized: bool, + enabled: bool, } // Note: this used to be a trait, but we "downgraded" it to a single concrete type @@ -50,7 +63,11 @@ impl Extension { } self.initialized = true; - self.ops.take() + let mut ops = self.ops.take()?; + for op in ops.iter_mut() { + op.enabled = self.enabled && op.enabled; + } + Some(ops) } /// Allows setting up the initial op-state of an isolate at startup. @@ -81,6 +98,14 @@ impl Extension { .map(|f| f(op_state, cx)) .unwrap_or(false) } + + pub fn enabled(self, enabled: bool) -> Self { + Self { enabled, ..self } + } + + pub fn disable(self) -> Self { + self.enabled(false) + } } // Provides a convenient builder pattern to declare Extensions @@ -138,6 +163,7 @@ impl ExtensionBuilder { middleware_fn: self.middleware.take(), event_loop_middleware: self.event_loop_middleware.take(), initialized: false, + enabled: true, } } } |