diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-03-17 12:22:15 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-17 18:22:15 +0000 |
commit | e55b448730160a6e4df9815a268d4049ac89deab (patch) | |
tree | 35d80fd60f2f1d1d06903caff256484a7d703d76 /ext/websocket/lib.rs | |
parent | 0bc6bf5d33b8198253954d7f04558270de45c925 (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.rs | 88 |
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") |