diff options
Diffstat (limited to 'core/extensions.rs')
-rw-r--r-- | core/extensions.rs | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/core/extensions.rs b/core/extensions.rs index e08e8c566..16cca924d 100644 --- a/core/extensions.rs +++ b/core/extensions.rs @@ -6,6 +6,7 @@ use std::rc::Rc; use std::task::Context; use v8::fast_api::FastFunction; +#[derive(Clone, Debug)] pub struct ExtensionFileSource { pub specifier: String, pub code: &'static str, @@ -244,8 +245,9 @@ impl ExtensionBuilder { } } } -/// Helps embed JS files in an extension. Returns Vec<(&'static str, &'static str)> -/// representing the filename and source code. + +/// Helps embed JS files in an extension. Returns a vector of +/// `ExtensionFileSource`, that represent the filename and source code. /// /// Example: /// ```ignore @@ -265,3 +267,29 @@ macro_rules! include_js_files { ] }; } + +/// Helps embed JS files in an extension. Returns a vector of +/// `ExtensionFileSource`, that represent the filename and source code. +/// Additional "dir" option is required, that specifies which directory in the +/// crate root contains the listed files. "dir" option will be prepended to +/// each file name. +/// +/// Example: +/// ```ignore +/// include_js_files_dir!( +/// dir "example", +/// "01_hello.js", +/// "02_goodbye.js", +/// ) +/// ``` +#[macro_export] +macro_rules! include_js_files_dir { + (dir $dir:literal, $($file:literal,)+) => { + vec![ + $($crate::ExtensionFileSource { + specifier: concat!($dir, "/", $file).to_string(), + code: include_str!(concat!($dir, "/", $file)), + },)+ + ] + }; +} |