summaryrefslogtreecommitdiff
path: root/cli/ops/tty.rs
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2020-09-10 09:57:45 -0400
committerGitHub <noreply@github.com>2020-09-10 09:57:45 -0400
commit7c2e7c660804afca823d60e6496aa853f75db16c (patch)
treeb7746b181c1564c6b1abd2e906662f9e6b008417 /cli/ops/tty.rs
parent6f70e6e72ba2d5c1de7495adac37c1e4f4e86b24 (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.rs33
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;