diff options
Diffstat (limited to 'runtime/examples/extension_with_ops')
-rw-r--r-- | runtime/examples/extension_with_ops/main.js | 2 | ||||
-rw-r--r-- | runtime/examples/extension_with_ops/main.rs | 44 |
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(()) +} |