summaryrefslogtreecommitdiff
path: root/core/extensions.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/extensions.rs')
-rw-r--r--core/extensions.rs58
1 files changed, 31 insertions, 27 deletions
diff --git a/core/extensions.rs b/core/extensions.rs
index ba7bdb18a..e08e8c566 100644
--- a/core/extensions.rs
+++ b/core/extensions.rs
@@ -6,7 +6,10 @@ use std::rc::Rc;
use std::task::Context;
use v8::fast_api::FastFunction;
-pub type SourcePair = (String, &'static str);
+pub struct ExtensionFileSource {
+ pub specifier: String,
+ pub code: &'static str,
+}
pub type OpFnRef = v8::FunctionCallback;
pub type OpMiddlewareFn = dyn Fn(OpDecl) -> OpDecl;
pub type OpStateFn = dyn Fn(&mut OpState) -> Result<(), Error>;
@@ -37,8 +40,8 @@ impl OpDecl {
#[derive(Default)]
pub struct Extension {
- js_files: Option<Vec<SourcePair>>,
- esm_files: Option<Vec<SourcePair>>,
+ js_files: Option<Vec<ExtensionFileSource>>,
+ esm_files: Option<Vec<ExtensionFileSource>>,
ops: Option<Vec<OpDecl>>,
opstate_fn: Option<Box<OpStateFn>>,
middleware_fn: Option<Box<OpMiddlewareFn>>,
@@ -82,14 +85,14 @@ impl Extension {
/// returns JS source code to be loaded into the isolate (either at snapshotting,
/// or at startup). as a vector of a tuple of the file name, and the source code.
- pub fn get_js_sources(&self) -> &[SourcePair] {
+ pub fn get_js_sources(&self) -> &[ExtensionFileSource] {
match &self.js_files {
Some(files) => files,
None => &[],
}
}
- pub fn get_esm_sources(&self) -> &[SourcePair] {
+ pub fn get_esm_sources(&self) -> &[ExtensionFileSource] {
match &self.esm_files {
Some(files) => files,
None => &[],
@@ -152,8 +155,8 @@ impl Extension {
// Provides a convenient builder pattern to declare Extensions
#[derive(Default)]
pub struct ExtensionBuilder {
- js: Vec<SourcePair>,
- esm: Vec<SourcePair>,
+ js: Vec<ExtensionFileSource>,
+ esm: Vec<ExtensionFileSource>,
ops: Vec<OpDecl>,
state: Option<Box<OpStateFn>>,
middleware: Option<Box<OpMiddlewareFn>>,
@@ -168,26 +171,27 @@ impl ExtensionBuilder {
self
}
- pub fn js(
- &mut self,
- js_files: Vec<(&'static str, &'static str)>,
- ) -> &mut Self {
- let js_files = js_files.into_iter().map(|source_pair| {
- let name = format!("internal:{}/{}", self.name, source_pair.0);
- (name, source_pair.1)
- });
+ pub fn js(&mut self, js_files: Vec<ExtensionFileSource>) -> &mut Self {
+ let js_files =
+ js_files.into_iter().map(|file_source| ExtensionFileSource {
+ specifier: format!("internal:{}/{}", self.name, file_source.specifier),
+ code: file_source.code,
+ });
self.js.extend(js_files);
self
}
- pub fn esm(
- &mut self,
- esm_files: Vec<(&'static str, &'static str)>,
- ) -> &mut Self {
- let esm_files = esm_files.into_iter().map(|source_pair| {
- let name = format!("internal:{}/{}", self.name, source_pair.0);
- (name, source_pair.1)
- });
+ pub fn esm(&mut self, esm_files: Vec<ExtensionFileSource>) -> &mut Self {
+ let esm_files =
+ esm_files
+ .into_iter()
+ .map(|file_source| ExtensionFileSource {
+ specifier: format!(
+ "internal:{}/{}",
+ self.name, file_source.specifier
+ ),
+ code: file_source.code,
+ });
self.esm.extend(esm_files);
self
}
@@ -254,10 +258,10 @@ impl ExtensionBuilder {
macro_rules! include_js_files {
($($file:literal,)+) => {
vec![
- $((
- $file,
- include_str!($file),
- ),)+
+ $($crate::ExtensionFileSource {
+ specifier: $file.to_string(),
+ code: include_str!($file),
+ },)+
]
};
}