diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2020-09-10 09:57:45 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-10 09:57:45 -0400 |
commit | 7c2e7c660804afca823d60e6496aa853f75db16c (patch) | |
tree | b7746b181c1564c6b1abd2e906662f9e6b008417 /cli/ops/tty.rs | |
parent | 6f70e6e72ba2d5c1de7495adac37c1e4f4e86b24 (diff) |
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<RefCell<OpState>>`
* sync ops take `&mut OpState`
* removes `OpRegistry`, `OpRouter` traits
* `get_error_class_fn` moved to OpState
* ResourceTable moved to OpState
Diffstat (limited to 'cli/ops/tty.rs')
-rw-r--r-- | cli/ops/tty.rs | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/cli/ops/tty.rs b/cli/ops/tty.rs index 9079ca57e..84443c0bc 100644 --- a/cli/ops/tty.rs +++ b/cli/ops/tty.rs @@ -2,15 +2,13 @@ use super::io::std_file_resource; use super::io::{StreamResource, StreamResourceHolder}; -use crate::state::State; use deno_core::ErrBox; -use deno_core::OpRegistry; +use deno_core::OpState; use deno_core::ZeroCopyBuf; #[cfg(unix)] use nix::sys::termios; use serde_derive::{Deserialize, Serialize}; use serde_json::Value; -use std::rc::Rc; #[cfg(windows)] use winapi::shared::minwindef::DWORD; @@ -20,6 +18,7 @@ use winapi::um::wincon; const RAW_MODE_MASK: DWORD = wincon::ENABLE_LINE_INPUT | wincon::ENABLE_ECHO_INPUT | wincon::ENABLE_PROCESSED_INPUT; + #[cfg(windows)] fn get_windows_handle( f: &std::fs::File, @@ -36,10 +35,10 @@ fn get_windows_handle( Ok(handle) } -pub fn init(s: &Rc<State>) { - s.register_op_json_sync("op_set_raw", op_set_raw); - s.register_op_json_sync("op_isatty", op_isatty); - s.register_op_json_sync("op_console_size", op_console_size); +pub fn init(rt: &mut deno_core::JsRuntime) { + super::reg_json_sync(rt, "op_set_raw", op_set_raw); + super::reg_json_sync(rt, "op_isatty", op_isatty); + super::reg_json_sync(rt, "op_console_size", op_console_size); } #[derive(Deserialize)] @@ -49,11 +48,12 @@ struct SetRawArgs { } fn op_set_raw( - state: &State, + state: &mut OpState, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { - state.check_unstable("Deno.setRaw"); + super::cli_state(state).check_unstable("Deno.setRaw"); + let args: SetRawArgs = serde_json::from_value(args)?; let rid = args.rid; let is_raw = args.mode; @@ -69,8 +69,8 @@ fn op_set_raw( use winapi::shared::minwindef::FALSE; use winapi::um::{consoleapi, handleapi}; - let mut resource_table = state.resource_table.borrow_mut(); - let resource_holder = resource_table.get_mut::<StreamResourceHolder>(rid); + let resource_holder = + state.resource_table.get_mut::<StreamResourceHolder>(rid); if resource_holder.is_none() { return Err(ErrBox::bad_resource_id()); } @@ -135,8 +135,8 @@ fn op_set_raw( { use std::os::unix::io::AsRawFd; - let mut resource_table = state.resource_table.borrow_mut(); - let resource_holder = resource_table.get_mut::<StreamResourceHolder>(rid); + let resource_holder = + state.resource_table.get_mut::<StreamResourceHolder>(rid); if resource_holder.is_none() { return Err(ErrBox::bad_resource_id()); } @@ -217,7 +217,7 @@ struct IsattyArgs { } fn op_isatty( - state: &State, + state: &mut OpState, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { @@ -261,11 +261,12 @@ struct ConsoleSize { } fn op_console_size( - state: &State, + state: &mut OpState, args: Value, _zero_copy: &mut [ZeroCopyBuf], ) -> Result<Value, ErrBox> { - state.check_unstable("Deno.consoleSize"); + super::cli_state(state).check_unstable("Deno.consoleSize"); + let args: ConsoleSizeArgs = serde_json::from_value(args)?; let rid = args.rid; |