summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrowlKats <13135287+crowlKats@users.noreply.github.com>2021-03-17 22:33:29 +0100
committerGitHub <noreply@github.com>2021-03-17 17:33:29 -0400
commitb3fe85163f303a1592335b23c25554dd0e39a4c4 (patch)
tree03cadab59638e8508227a91a00887ad21a7c633a
parentbd961c3bc305e90e760394d2f424c5360a67543b (diff)
refactor: use serde ops more (#9817)
-rw-r--r--op_crates/fetch/lib.rs93
-rw-r--r--op_crates/url/lib.rs49
-rw-r--r--op_crates/websocket/lib.rs31
3 files changed, 76 insertions, 97 deletions
diff --git a/op_crates/fetch/lib.rs b/op_crates/fetch/lib.rs
index 456358b83..c37670852 100644
--- a/op_crates/fetch/lib.rs
+++ b/op_crates/fetch/lib.rs
@@ -9,7 +9,6 @@ use deno_core::error::AnyError;
use deno_core::futures::Future;
use deno_core::futures::Stream;
use deno_core::futures::StreamExt;
-use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::serde_json::Value;
use deno_core::url::Url;
@@ -103,27 +102,25 @@ pub fn get_declaration() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_fetch.d.ts")
}
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FetchArgs {
+ method: Option<String>,
+ url: String,
+ base_url: Option<String>,
+ headers: Vec<(String, String)>,
+ client_rid: Option<u32>,
+ has_body: bool,
+}
+
pub fn op_fetch<FP>(
state: &mut OpState,
- args: Value,
+ args: FetchArgs,
data: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError>
where
FP: FetchPermissions + 'static,
{
- #[derive(Deserialize)]
- #[serde(rename_all = "camelCase")]
- struct FetchArgs {
- method: Option<String>,
- url: String,
- base_url: Option<String>,
- headers: Vec<(String, String)>,
- client_rid: Option<u32>,
- has_body: bool,
- }
-
- let args: FetchArgs = serde_json::from_value(args)?;
-
let client = if let Some(rid) = args.client_rid {
let r = state
.resource_table
@@ -203,19 +200,17 @@ where
}))
}
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FetchSendArgs {
+ rid: u32,
+}
+
pub async fn op_fetch_send(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: FetchSendArgs,
_data: BufVec,
) -> Result<Value, AnyError> {
- #[derive(Deserialize)]
- #[serde(rename_all = "camelCase")]
- struct Args {
- rid: u32,
- }
-
- let args: Args = serde_json::from_value(args)?;
-
let request = state
.borrow_mut()
.resource_table
@@ -273,18 +268,17 @@ pub async fn op_fetch_send(
}))
}
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FetchRequestWriteArgs {
+ rid: u32,
+}
+
pub async fn op_fetch_request_write(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: FetchRequestWriteArgs,
data: BufVec,
) -> Result<Value, AnyError> {
- #[derive(Deserialize)]
- #[serde(rename_all = "camelCase")]
- struct Args {
- rid: u32,
- }
-
- let args: Args = serde_json::from_value(args)?;
let rid = args.rid;
let buf = match data.len() {
@@ -304,18 +298,17 @@ pub async fn op_fetch_request_write(
Ok(json!({}))
}
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct FetchResponseReadArgs {
+ rid: u32,
+}
+
pub async fn op_fetch_response_read(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: FetchResponseReadArgs,
data: BufVec,
) -> Result<Value, AnyError> {
- #[derive(Deserialize)]
- #[serde(rename_all = "camelCase")]
- struct Args {
- rid: u32,
- }
-
- let args: Args = serde_json::from_value(args)?;
let rid = args.rid;
if data.len() != 1 {
@@ -385,24 +378,22 @@ impl HttpClientResource {
}
}
+#[derive(Deserialize, Default, Debug)]
+#[serde(rename_all = "camelCase")]
+#[serde(default)]
+pub struct CreateHttpClientOptions {
+ ca_file: Option<String>,
+ ca_data: Option<String>,
+}
+
pub fn op_create_http_client<FP>(
state: &mut OpState,
- args: Value,
+ args: CreateHttpClientOptions,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError>
where
FP: FetchPermissions + 'static,
{
- #[derive(Deserialize, Default, Debug)]
- #[serde(rename_all = "camelCase")]
- #[serde(default)]
- struct CreateHttpClientOptions {
- ca_file: Option<String>,
- ca_data: Option<String>,
- }
-
- let args: CreateHttpClientOptions = serde_json::from_value(args)?;
-
if let Some(ca_file) = args.ca_file.clone() {
let permissions = state.borrow::<FP>();
permissions.check_read(&PathBuf::from(ca_file))?;
diff --git a/op_crates/url/lib.rs b/op_crates/url/lib.rs
index a655d8c34..3b55e539c 100644
--- a/op_crates/url/lib.rs
+++ b/op_crates/url/lib.rs
@@ -4,7 +4,6 @@ use deno_core::error::generic_error;
use deno_core::error::type_error;
use deno_core::error::uri_error;
use deno_core::error::AnyError;
-use deno_core::serde_json;
use deno_core::serde_json::json;
use deno_core::serde_json::Value;
use deno_core::url::form_urlencoded;
@@ -17,31 +16,31 @@ use serde::Serialize;
use std::panic::catch_unwind;
use std::path::PathBuf;
+#[derive(Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct UrlParseArgs {
+ href: String,
+ base_href: Option<String>,
+ // If one of the following are present, this is a setter call. Apply the
+ // proper `Url::set_*()` method after (re)parsing `href`.
+ set_hash: Option<String>,
+ set_host: Option<String>,
+ set_hostname: Option<String>,
+ set_password: Option<String>,
+ set_pathname: Option<String>,
+ set_port: Option<String>,
+ set_protocol: Option<String>,
+ set_search: Option<String>,
+ set_username: Option<String>,
+}
+
/// Parse `UrlParseArgs::href` with an optional `UrlParseArgs::base_href`, or an
/// optional part to "set" after parsing. Return `UrlParts`.
pub fn op_url_parse(
_state: &mut deno_core::OpState,
- args: Value,
+ args: UrlParseArgs,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError> {
- #[derive(Deserialize)]
- #[serde(rename_all = "camelCase")]
- struct UrlParseArgs {
- href: String,
- base_href: Option<String>,
- // If one of the following are present, this is a setter call. Apply the
- // proper `Url::set_*()` method after (re)parsing `href`.
- set_hash: Option<String>,
- set_host: Option<String>,
- set_hostname: Option<String>,
- set_password: Option<String>,
- set_pathname: Option<String>,
- set_port: Option<String>,
- set_protocol: Option<String>,
- set_search: Option<String>,
- set_username: Option<String>,
- }
- let args: UrlParseArgs = serde_json::from_value(args)?;
let base_url = args
.base_href
.as_ref()
@@ -120,11 +119,10 @@ pub fn op_url_parse(
pub fn op_url_parse_search_params(
_state: &mut deno_core::OpState,
- args: Value,
+ args: String,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError> {
- let search: String = serde_json::from_value(args)?;
- let search_params: Vec<_> = form_urlencoded::parse(search.as_bytes())
+ let search_params: Vec<_> = form_urlencoded::parse(args.as_bytes())
.into_iter()
.collect();
Ok(json!(search_params))
@@ -132,12 +130,11 @@ pub fn op_url_parse_search_params(
pub fn op_url_stringify_search_params(
_state: &mut deno_core::OpState,
- args: Value,
+ args: Vec<(String, String)>,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError> {
- let search_params: Vec<(String, String)> = serde_json::from_value(args)?;
let search = form_urlencoded::Serializer::new(String::new())
- .extend_pairs(search_params)
+ .extend_pairs(args)
.finish();
Ok(json!(search))
}
diff --git a/op_crates/websocket/lib.rs b/op_crates/websocket/lib.rs
index c914f11c5..665444c9d 100644
--- a/op_crates/websocket/lib.rs
+++ b/op_crates/websocket/lib.rs
@@ -18,7 +18,7 @@ use deno_core::JsRuntime;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
-use deno_core::{serde_json, ZeroCopyBuf};
+use deno_core::ZeroCopyBuf;
use http::{Method, Request, Uri};
use serde::Deserialize;
@@ -83,7 +83,7 @@ impl WsStreamResource {}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct CheckPermissionArgs {
+pub struct CheckPermissionArgs {
url: String,
}
@@ -92,14 +92,12 @@ struct CheckPermissionArgs {
// but actual op that connects WS is async.
pub fn op_ws_check_permission<WP>(
state: &mut OpState,
- args: Value,
+ args: CheckPermissionArgs,
_zero_copy: &mut [ZeroCopyBuf],
) -> Result<Value, AnyError>
where
WP: WebSocketPermissions + 'static,
{
- let args: CheckPermissionArgs = serde_json::from_value(args)?;
-
state
.borrow::<WP>()
.check_net_url(&url::Url::parse(&args.url)?)?;
@@ -109,21 +107,19 @@ where
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct CreateArgs {
+pub struct CreateArgs {
url: String,
protocols: String,
}
pub async fn op_ws_create<WP>(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: CreateArgs,
_bufs: BufVec,
) -> Result<Value, AnyError>
where
WP: WebSocketPermissions + 'static,
{
- let args: CreateArgs = serde_json::from_value(args)?;
-
{
let s = state.borrow();
s.borrow::<WP>()
@@ -217,7 +213,7 @@ where
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct SendArgs {
+pub struct SendArgs {
rid: u32,
kind: String,
text: Option<String>,
@@ -225,11 +221,9 @@ struct SendArgs {
pub async fn op_ws_send(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: SendArgs,
bufs: BufVec,
) -> Result<Value, AnyError> {
- let args: SendArgs = serde_json::from_value(args)?;
-
let msg = match args.kind.as_str() {
"text" => Message::Text(args.text.unwrap()),
"binary" => Message::Binary(bufs[0].to_vec()),
@@ -250,7 +244,7 @@ pub async fn op_ws_send(
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct CloseArgs {
+pub struct CloseArgs {
rid: u32,
code: Option<u16>,
reason: Option<String>,
@@ -258,10 +252,9 @@ struct CloseArgs {
pub async fn op_ws_close(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: CloseArgs,
_bufs: BufVec,
) -> Result<Value, AnyError> {
- let args: CloseArgs = serde_json::from_value(args)?;
let rid = args.rid;
let msg = Message::Close(args.code.map(|c| CloseFrame {
code: CloseCode::from(c),
@@ -283,17 +276,15 @@ pub async fn op_ws_close(
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
-struct NextEventArgs {
+pub struct NextEventArgs {
rid: u32,
}
pub async fn op_ws_next_event(
state: Rc<RefCell<OpState>>,
- args: Value,
+ args: NextEventArgs,
_bufs: BufVec,
) -> Result<Value, AnyError> {
- let args: NextEventArgs = serde_json::from_value(args)?;
-
let resource = state
.borrow_mut()
.resource_table