summaryrefslogtreecommitdiff
path: root/runtime/examples/extension_with_ops
diff options
context:
space:
mode:
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(())
+}