summaryrefslogtreecommitdiff
path: root/runtime/ops/web_worker.rs
diff options
context:
space:
mode:
authorAaron O'Mullan <aaron.omullan@gmail.com>2021-05-03 01:22:57 +0200
committerGitHub <noreply@github.com>2021-05-02 19:22:57 -0400
commit8377957666d6ca80d48d6fa78afd3e16bf3f7aa8 (patch)
tree071564d391846624c18b81cdccf3350c2e73ed13 /runtime/ops/web_worker.rs
parent40961cda583faaba128b555caebf284fd6298bb1 (diff)
refactor(runtime): use Extensions (#10461)
Diffstat (limited to 'runtime/ops/web_worker.rs')
-rw-r--r--runtime/ops/web_worker.rs61
1 files changed, 32 insertions, 29 deletions
diff --git a/runtime/ops/web_worker.rs b/runtime/ops/web_worker.rs
index 68cef110c..17b72cb38 100644
--- a/runtime/ops/web_worker.rs
+++ b/runtime/ops/web_worker.rs
@@ -4,34 +4,37 @@ use crate::web_worker::WebWorkerHandle;
use crate::web_worker::WorkerEvent;
use deno_core::error::null_opbuf;
use deno_core::futures::channel::mpsc;
+use deno_core::op_sync;
+use deno_core::Extension;
-pub fn init(
- rt: &mut deno_core::JsRuntime,
- sender: mpsc::Sender<WorkerEvent>,
- handle: WebWorkerHandle,
-) {
- // Post message to host as guest worker.
- let sender_ = sender.clone();
- super::reg_sync(
- rt,
- "op_worker_post_message",
- move |_state, _args: (), buf| {
- let buf = buf.ok_or_else(null_opbuf)?;
- let msg_buf: Box<[u8]> = (*buf).into();
- sender_
- .clone()
- .try_send(WorkerEvent::Message(msg_buf))
- .expect("Failed to post message to host");
- Ok(())
- },
- );
-
- // Notify host that guest worker closes.
- super::reg_sync(rt, "op_worker_close", move |_state, _args: (), _bufs| {
- // Notify parent that we're finished
- sender.clone().close_channel();
- // Terminate execution of current worker
- handle.terminate();
- Ok(())
- });
+pub fn init() -> Extension {
+ Extension::builder()
+ .ops(vec![
+ (
+ "op_worker_post_message",
+ op_sync(move |state, _args: (), buf| {
+ let buf = buf.ok_or_else(null_opbuf)?;
+ let msg_buf: Box<[u8]> = (*buf).into();
+ let mut sender = state.borrow::<mpsc::Sender<WorkerEvent>>().clone();
+ sender
+ .try_send(WorkerEvent::Message(msg_buf))
+ .expect("Failed to post message to host");
+ Ok(())
+ }),
+ ),
+ // Notify host that guest worker closes.
+ (
+ "op_worker_close",
+ op_sync(move |state, _args: (), _bufs| {
+ // Notify parent that we're finished
+ let mut sender = state.borrow::<mpsc::Sender<WorkerEvent>>().clone();
+ sender.close_channel();
+ // Terminate execution of current worker
+ let handle = state.borrow::<WebWorkerHandle>();
+ handle.terminate();
+ Ok(())
+ }),
+ ),
+ ])
+ .build()
}