summaryrefslogtreecommitdiff
path: root/runtime/examples/extension_with_ops
diff options
context:
space:
mode:
authorExidex <16986685+Exidex@users.noreply.github.com>2023-05-31 22:26:24 +0200
committerGitHub <noreply@github.com>2023-05-31 14:26:24 -0600
commitf3193e0e1c12ea139f00d6b19d152b95f37b73c3 (patch)
treee53d0a2bad466194a319d414c2f44caafcb538d6 /runtime/examples/extension_with_ops
parentb1e28b0708b378fa6cbe3a0ec95bb94b33775355 (diff)
feat(runtime): Add example for extension with ops (#19204)
Spend quite some time trying to get this working. With proper example would have been a lot faster. So this is pr with the example. I also rearranged examples a little bit to allow for addition of more examples
Diffstat (limited to 'runtime/examples/extension_with_ops')
-rw-r--r--runtime/examples/extension_with_ops/main.js2
-rw-r--r--runtime/examples/extension_with_ops/main.rs44
2 files changed, 46 insertions, 0 deletions
diff --git a/runtime/examples/extension_with_ops/main.js b/runtime/examples/extension_with_ops/main.js
new file mode 100644
index 000000000..042573c08
--- /dev/null
+++ b/runtime/examples/extension_with_ops/main.js
@@ -0,0 +1,2 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+Deno[Deno.internal].core.ops.op_hello("World");
diff --git a/runtime/examples/extension_with_ops/main.rs b/runtime/examples/extension_with_ops/main.rs
new file mode 100644
index 000000000..47feaeaeb
--- /dev/null
+++ b/runtime/examples/extension_with_ops/main.rs
@@ -0,0 +1,44 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+
+use std::path::Path;
+use std::rc::Rc;
+
+use deno_core::error::AnyError;
+use deno_core::op;
+use deno_core::FsModuleLoader;
+use deno_core::ModuleSpecifier;
+use deno_runtime::permissions::PermissionsContainer;
+use deno_runtime::worker::MainWorker;
+use deno_runtime::worker::WorkerOptions;
+
+deno_core::extension!(
+ hello_runtime,
+ ops = [op_hello],
+ customizer = |ext: &mut deno_core::ExtensionBuilder| {
+ ext.force_op_registration();
+ },
+);
+
+#[op]
+fn op_hello(text: &str) {
+ println!("Hello {}!", text);
+}
+
+#[tokio::main]
+async fn main() -> Result<(), AnyError> {
+ let js_path = Path::new(env!("CARGO_MANIFEST_DIR"))
+ .join("examples/extension_with_ops/main.js");
+ let main_module = ModuleSpecifier::from_file_path(js_path).unwrap();
+ let mut worker = MainWorker::bootstrap_from_options(
+ main_module.clone(),
+ PermissionsContainer::allow_all(),
+ WorkerOptions {
+ module_loader: Rc::new(FsModuleLoader),
+ extensions: vec![hello_runtime::init_ops()],
+ ..Default::default()
+ },
+ );
+ worker.execute_main_module(&main_module).await?;
+ worker.run_event_loop(false).await?;
+ Ok(())
+}