summaryrefslogtreecommitdiff
path: root/ext/websocket/lib.rs
diff options
context:
space:
mode:
authorMatt Mastracci <matthew@mastracci.com>2023-03-17 12:22:15 -0600
committerGitHub <noreply@github.com>2023-03-17 18:22:15 +0000
commite55b448730160a6e4df9815a268d4049ac89deab (patch)
tree35d80fd60f2f1d1d06903caff256484a7d703d76 /ext/websocket/lib.rs
parent0bc6bf5d33b8198253954d7f04558270de45c925 (diff)
feat(core) deno_core::extension! macro to simplify extension registration (#18210)
This implements two macros to simplify extension registration and centralize a lot of the boilerplate as a base for future improvements: * `deno_core::ops!` registers a block of `#[op]`s, optionally with type parameters, useful for places where we share lists of ops * `deno_core::extension!` is used to register an extension, and creates two methods that can be used at runtime/snapshot generation time: `init_ops` and `init_ops_and_esm`. --------- Co-authored-by: Bartek IwaƄczuk <biwanczuk@gmail.com>
Diffstat (limited to 'ext/websocket/lib.rs')
-rw-r--r--ext/websocket/lib.rs88
1 files changed, 24 insertions, 64 deletions
diff --git a/ext/websocket/lib.rs b/ext/websocket/lib.rs
index dbbeae21f..e480d7f4c 100644
--- a/ext/websocket/lib.rs
+++ b/ext/websocket/lib.rs
@@ -7,16 +7,13 @@ use deno_core::futures::stream::SplitSink;
use deno_core::futures::stream::SplitStream;
use deno_core::futures::SinkExt;
use deno_core::futures::StreamExt;
-use deno_core::include_js_files;
use deno_core::op;
-use deno_core::ExtensionBuilder;
use deno_core::url;
use deno_core::AsyncRefCell;
use deno_core::ByteString;
use deno_core::CancelFuture;
use deno_core::CancelHandle;
-use deno_core::Extension;
use deno_core::OpState;
use deno_core::RcRef;
use deno_core::Resource;
@@ -498,67 +495,30 @@ pub async fn op_ws_next_event(
Ok(res)
}
-fn ext() -> ExtensionBuilder {
- Extension::builder_with_deps(
- env!("CARGO_PKG_NAME"),
- &["deno_url", "deno_webidl"],
- )
-}
-
-fn ops<P: WebSocketPermissions + 'static>(
- ext: &mut ExtensionBuilder,
- user_agent: String,
- root_cert_store: Option<RootCertStore>,
- unsafely_ignore_certificate_errors: Option<Vec<String>>,
-) -> &mut ExtensionBuilder {
- ext
- .ops(vec![
- op_ws_check_permission_and_cancel_handle::decl::<P>(),
- op_ws_create::decl::<P>(),
- op_ws_send::decl(),
- op_ws_close::decl(),
- op_ws_next_event::decl(),
- ])
- .state(move |state| {
- state.put::<WsUserAgent>(WsUserAgent(user_agent.clone()));
- state.put(UnsafelyIgnoreCertificateErrors(
- unsafely_ignore_certificate_errors.clone(),
- ));
- state.put::<WsRootStore>(WsRootStore(root_cert_store.clone()));
- })
-}
-
-pub fn init_ops_and_esm<P: WebSocketPermissions + 'static>(
- user_agent: String,
- root_cert_store: Option<RootCertStore>,
- unsafely_ignore_certificate_errors: Option<Vec<String>>,
-) -> Extension {
- ops::<P>(
- &mut ext(),
- user_agent,
- root_cert_store,
- unsafely_ignore_certificate_errors,
- )
- .esm(include_js_files!(
- "01_websocket.js",
- "02_websocketstream.js",
- ))
- .build()
-}
-
-pub fn init_ops<P: WebSocketPermissions + 'static>(
- user_agent: String,
- root_cert_store: Option<RootCertStore>,
- unsafely_ignore_certificate_errors: Option<Vec<String>>,
-) -> Extension {
- ops::<P>(
- &mut ext(),
- user_agent,
- root_cert_store,
- unsafely_ignore_certificate_errors,
- )
- .build()
-}
+deno_core::extension!(deno_websocket,
+ deps = [ deno_url, deno_webidl ],
+ parameters = [P: WebSocketPermissions],
+ ops = [
+ op_ws_check_permission_and_cancel_handle<P>,
+ op_ws_create<P>,
+ op_ws_send,
+ op_ws_close,
+ op_ws_next_event,
+ ],
+ esm = [ "01_websocket.js", "02_websocketstream.js" ],
+ config = {
+ user_agent: String,
+ root_cert_store: Option<RootCertStore>,
+ unsafely_ignore_certificate_errors: Option<Vec<String>>
+ },
+ state = |state, user_agent, root_cert_store, unsafely_ignore_certificate_errors| {
+ state.put::<WsUserAgent>(WsUserAgent(user_agent));
+ state.put(UnsafelyIgnoreCertificateErrors(
+ unsafely_ignore_certificate_errors,
+ ));
+ state.put::<WsRootStore>(WsRootStore(root_cert_store));
+ },
+);
pub fn get_declaration() -> PathBuf {
PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("lib.deno_websocket.d.ts")