summaryrefslogtreecommitdiff
path: root/core/examples
diff options
context:
space:
mode:
Diffstat (limited to 'core/examples')
-rw-r--r--core/examples/hello_world.rs22
-rw-r--r--core/examples/http_bench_json_ops.js2
-rw-r--r--core/examples/http_bench_json_ops.rs74
3 files changed, 31 insertions, 67 deletions
diff --git a/core/examples/hello_world.rs b/core/examples/hello_world.rs
index 1f696a817..c46fc1d98 100644
--- a/core/examples/hello_world.rs
+++ b/core/examples/hello_world.rs
@@ -50,27 +50,13 @@ fn main() {
// The json_op_sync function automatically deserializes
// the first ZeroCopyBuf and serializes the return value
// to reduce boilerplate
- json_op_sync(|_state, json, zero_copy| {
- // We check that we only got the JSON value,
- // and that it's of the right type.
+ json_op_sync(|_state, json: Vec<f64>, zero_copy| {
+ // We check that we only got the JSON value.
if !zero_copy.is_empty() {
Err(anyhow!("Expected exactly one argument"))
- } else if !json.is_array() {
- Err(anyhow!("Argument is not of type array"))
- } else if !json
- .as_array()
- .unwrap()
- .iter()
- .all(|value| value.is_number())
- {
- Err(anyhow!("Argument is not array of numbers"))
} else {
- // And if everything checks out we do our actual task
- let sum = json
- .as_array()
- .unwrap()
- .iter()
- .fold(0.0, |a, v| a + v.as_f64().unwrap());
+ // And if we did, do our actual task
+ let sum = json.iter().fold(0.0, |a, v| a + v);
// Finally we return a JSON value
Ok(Value::from(sum))
diff --git a/core/examples/http_bench_json_ops.js b/core/examples/http_bench_json_ops.js
index 80c5a6115..071df100f 100644
--- a/core/examples/http_bench_json_ops.js
+++ b/core/examples/http_bench_json_ops.js
@@ -11,7 +11,7 @@ const responseBuf = new Uint8Array(
/** Listens on 0.0.0.0:4500, returns rid. */
function listen() {
- const { rid } = Deno.core.jsonOpSync("listen", {});
+ const { rid } = Deno.core.jsonOpSync("listen");
return rid;
}
diff --git a/core/examples/http_bench_json_ops.rs b/core/examples/http_bench_json_ops.rs
index 4fd25d6b8..c24175747 100644
--- a/core/examples/http_bench_json_ops.rs
+++ b/core/examples/http_bench_json_ops.rs
@@ -14,10 +14,11 @@ use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
use deno_core::ZeroCopyBuf;
+use serde::Deserialize;
+use serde::Serialize;
use serde_json::Value;
use std::cell::RefCell;
use std::convert::TryFrom;
-use std::convert::TryInto;
use std::env;
use std::io::Error;
use std::net::SocketAddr;
@@ -124,83 +125,67 @@ fn create_js_runtime() -> JsRuntime {
runtime
}
+#[derive(Deserialize, Serialize)]
+struct ResourceId {
+ rid: u32,
+}
+
fn op_listen(
state: &mut OpState,
- _args: Value,
+ _args: (),
_bufs: &mut [ZeroCopyBuf],
-) -> Result<Value, AnyError> {
+) -> Result<ResourceId, AnyError> {
debug!("listen");
let addr = "127.0.0.1:4544".parse::<SocketAddr>().unwrap();
let std_listener = std::net::TcpListener::bind(&addr)?;
std_listener.set_nonblocking(true)?;
let listener = TcpListener::try_from(std_listener)?;
let rid = state.resource_table.add(listener);
- Ok(serde_json::json!({ "rid": rid }))
+ Ok(ResourceId { rid })
}
fn op_close(
state: &mut OpState,
- args: Value,
+ args: ResourceId,
_buf: &mut [ZeroCopyBuf],
-) -> Result<Value, AnyError> {
- let rid: u32 = args
- .get("rid")
- .unwrap()
- .as_u64()
- .unwrap()
- .try_into()
- .unwrap();
- debug!("close rid={}", rid);
+) -> Result<(), AnyError> {
+ debug!("close rid={}", args.rid);
state
.resource_table
- .close(rid)
- .map(|_| serde_json::json!(()))
+ .close(args.rid)
+ .map(|_| ())
.ok_or_else(bad_resource_id)
}
async fn op_accept(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: ResourceId,
_bufs: BufVec,
-) -> Result<Value, AnyError> {
- let rid: u32 = args
- .get("rid")
- .unwrap()
- .as_u64()
- .unwrap()
- .try_into()
- .unwrap();
- debug!("accept rid={}", rid);
+) -> Result<ResourceId, AnyError> {
+ debug!("accept rid={}", args.rid);
let listener = state
.borrow()
.resource_table
- .get::<TcpListener>(rid)
+ .get::<TcpListener>(args.rid)
.ok_or_else(bad_resource_id)?;
let stream = listener.accept().await?;
let rid = state.borrow_mut().resource_table.add(stream);
- Ok(serde_json::json!({ "rid": rid }))
+ Ok(ResourceId { rid })
}
async fn op_read(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: ResourceId,
mut bufs: BufVec,
) -> Result<Value, AnyError> {
assert_eq!(bufs.len(), 1, "Invalid number of arguments");
- let rid: u32 = args
- .get("rid")
- .unwrap()
- .as_u64()
- .unwrap()
- .try_into()
- .unwrap();
- debug!("read rid={}", rid);
+ debug!("read rid={}", args.rid);
let stream = state
.borrow()
.resource_table
- .get::<TcpStream>(rid)
+ .get::<TcpStream>(args.rid)
.ok_or_else(bad_resource_id)?;
let nread = stream.read(&mut bufs[0]).await?;
Ok(serde_json::json!({ "nread": nread }))
@@ -208,23 +193,16 @@ async fn op_read(
async fn op_write(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: ResourceId,
bufs: BufVec,
) -> Result<Value, AnyError> {
assert_eq!(bufs.len(), 1, "Invalid number of arguments");
- let rid: u32 = args
- .get("rid")
- .unwrap()
- .as_u64()
- .unwrap()
- .try_into()
- .unwrap();
- debug!("write rid={}", rid);
+ debug!("write rid={}", args.rid);
let stream = state
.borrow()
.resource_table
- .get::<TcpStream>(rid)
+ .get::<TcpStream>(args.rid)
.ok_or_else(bad_resource_id)?;
let nwritten = stream.write(&bufs[0]).await?;
Ok(serde_json::json!({ "nwritten": nwritten }))