summaryrefslogtreecommitdiff
path: root/cli/ops/files.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-08-26 14:50:21 +0200
committerRyan Dahl <ry@tinyclouds.org>2019-08-26 08:50:21 -0400
commit520f9631e09aa720fd8c03513ee8ea967f5ed4b2 (patch)
treefc3d1bd5182452ca1865a5c2631355e0895af94c /cli/ops/files.rs
parent017f88ee99b0fe40221e6af92e0b6a976fbaf2ad (diff)
bring back json ops (#2815)
Diffstat (limited to 'cli/ops/files.rs')
-rw-r--r--cli/ops/files.rs98
1 files changed, 52 insertions, 46 deletions
diff --git a/cli/ops/files.rs b/cli/ops/files.rs
index 023bd65f9..c02a69b9c 100644
--- a/cli/ops/files.rs
+++ b/cli/ops/files.rs
@@ -1,5 +1,6 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
use super::dispatch_flatbuffers::serialize_response;
+use super::dispatch_json::{Deserialize, JsonOp, Value};
use super::utils::*;
use crate::deno_error;
use crate::fs as deno_fs;
@@ -14,17 +15,22 @@ use std;
use std::convert::From;
use tokio;
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct OpenArgs {
+ promise_id: Option<u64>,
+ filename: String,
+ mode: String,
+}
+
pub fn op_open(
state: &ThreadSafeState,
- base: &msg::Base<'_>,
- data: Option<PinnedBuf>,
-) -> CliOpResult {
- assert!(data.is_none());
- let cmd_id = base.cmd_id();
- let inner = base.inner_as_open().unwrap();
- let (filename, filename_) =
- deno_fs::resolve_from_cwd(inner.filename().unwrap())?;
- let mode = inner.mode().unwrap();
+ args: Value,
+ _zero_copy: Option<PinnedBuf>,
+) -> Result<JsonOp, ErrBox> {
+ let args: OpenArgs = serde_json::from_value(args)?;
+ let (filename, filename_) = deno_fs::resolve_from_cwd(&args.filename)?;
+ let mode = args.mode.as_ref();
let mut open_options = tokio::fs::OpenOptions::new();
@@ -75,44 +81,39 @@ pub fn op_open(
}
}
+ let is_sync = args.promise_id.is_none();
let op = open_options.open(filename).map_err(ErrBox::from).and_then(
move |fs_file| {
let resource = resources::add_fs_file(fs_file);
- let builder = &mut FlatBufferBuilder::new();
- let inner =
- msg::OpenRes::create(builder, &msg::OpenResArgs { rid: resource.rid });
- Ok(serialize_response(
- cmd_id,
- builder,
- msg::BaseArgs {
- inner: Some(inner.as_union_value()),
- inner_type: msg::Any::OpenRes,
- ..Default::default()
- },
- ))
+ futures::future::ok(json!(resource.rid))
},
);
- if base.sync() {
+
+ if is_sync {
let buf = op.wait()?;
- Ok(Op::Sync(buf))
+ Ok(JsonOp::Sync(buf))
} else {
- Ok(Op::Async(Box::new(op)))
+ Ok(JsonOp::Async(Box::new(op)))
}
}
+#[derive(Deserialize)]
+struct CloseArgs {
+ rid: i32,
+}
+
pub fn op_close(
_state: &ThreadSafeState,
- base: &msg::Base<'_>,
- data: Option<PinnedBuf>,
-) -> CliOpResult {
- assert!(data.is_none());
- let inner = base.inner_as_close().unwrap();
- let rid = inner.rid();
- match resources::lookup(rid) {
+ args: Value,
+ _zero_copy: Option<PinnedBuf>,
+) -> Result<JsonOp, ErrBox> {
+ let args: CloseArgs = serde_json::from_value(args)?;
+
+ match resources::lookup(args.rid as u32) {
None => Err(deno_error::bad_resource()),
Some(resource) => {
resource.close();
- ok_buf(empty_buf())
+ Ok(JsonOp::Sync(json!({})))
}
}
}
@@ -202,27 +203,32 @@ pub fn op_write(
}
}
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct SeekArgs {
+ promise_id: Option<u64>,
+ rid: i32,
+ offset: i32,
+ whence: i32,
+}
+
pub fn op_seek(
_state: &ThreadSafeState,
- base: &msg::Base<'_>,
- data: Option<PinnedBuf>,
-) -> CliOpResult {
- assert!(data.is_none());
- let inner = base.inner_as_seek().unwrap();
- let rid = inner.rid();
- let offset = inner.offset();
- let whence = inner.whence();
+ args: Value,
+ _zero_copy: Option<PinnedBuf>,
+) -> Result<JsonOp, ErrBox> {
+ let args: SeekArgs = serde_json::from_value(args)?;
- match resources::lookup(rid) {
+ match resources::lookup(args.rid as u32) {
None => Err(deno_error::bad_resource()),
Some(resource) => {
- let op = resources::seek(resource, offset, whence)
- .and_then(move |_| Ok(empty_buf()));
- if base.sync() {
+ let op = resources::seek(resource, args.offset, args.whence as u32)
+ .and_then(move |_| futures::future::ok(json!({})));
+ if args.promise_id.is_none() {
let buf = op.wait()?;
- Ok(Op::Sync(buf))
+ Ok(JsonOp::Sync(buf))
} else {
- Ok(Op::Async(Box::new(op)))
+ Ok(JsonOp::Async(Box::new(op)))
}
}
}