From 7c2e7c660804afca823d60e6496aa853f75db16c Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 10 Sep 2020 09:57:45 -0400 Subject: Use gotham-like state for ops (#7385) Provides a concrete state type that can be dynamically added. This is necessary for op crates. * renames BasicState to OpState * async ops take `Rc>` * sync ops take `&mut OpState` * removes `OpRegistry`, `OpRouter` traits * `get_error_class_fn` moved to OpState * ResourceTable moved to OpState --- cli/ops/fs_events.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'cli/ops/fs_events.rs') diff --git a/cli/ops/fs_events.rs b/cli/ops/fs_events.rs index 142aa3ccf..3468169b0 100644 --- a/cli/ops/fs_events.rs +++ b/cli/ops/fs_events.rs @@ -1,9 +1,8 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use crate::state::State; use deno_core::BufVec; use deno_core::ErrBox; -use deno_core::OpRegistry; +use deno_core::OpState; use deno_core::ZeroCopyBuf; use futures::future::poll_fn; use notify::event::Event as NotifyEvent; @@ -15,14 +14,15 @@ use notify::Watcher; use serde::Serialize; use serde_derive::Deserialize; use serde_json::Value; +use std::cell::RefCell; use std::convert::From; use std::path::PathBuf; use std::rc::Rc; use tokio::sync::mpsc; -pub fn init(s: &Rc) { - s.register_op_json_sync("op_fs_events_open", op_fs_events_open); - s.register_op_json_async("op_fs_events_poll", op_fs_events_poll); +pub fn init(rt: &mut deno_core::JsRuntime) { + super::reg_json_sync(rt, "op_fs_events_open", op_fs_events_open); + super::reg_json_async(rt, "op_fs_events_poll", op_fs_events_poll); } struct FsEventsResource { @@ -64,7 +64,7 @@ impl From for FsEvent { } fn op_fs_events_open( - state: &State, + state: &mut OpState, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result { @@ -90,19 +90,16 @@ fn op_fs_events_open( RecursiveMode::NonRecursive }; for path in &args.paths { - state.check_read(&PathBuf::from(path))?; + super::cli_state(state).check_read(&PathBuf::from(path))?; watcher.watch(path, recursive_mode)?; } let resource = FsEventsResource { watcher, receiver }; - let rid = state - .resource_table - .borrow_mut() - .add("fsEvents", Box::new(resource)); + let rid = state.resource_table.add("fsEvents", Box::new(resource)); Ok(json!(rid)) } async fn op_fs_events_poll( - state: Rc, + state: Rc>, args: Value, _zero_copy: BufVec, ) -> Result { @@ -112,8 +109,9 @@ async fn op_fs_events_poll( } let PollArgs { rid } = serde_json::from_value(args)?; poll_fn(move |cx| { - let mut resource_table = state.resource_table.borrow_mut(); - let watcher = resource_table + let mut state = state.borrow_mut(); + let watcher = state + .resource_table .get_mut::(rid) .ok_or_else(ErrBox::bad_resource_id)?; watcher -- cgit v1.2.3