use std::borrow::Cow;
use std::path::Path;
use std::sync::Arc;
pub type DenoRtNativeAddonLoaderRc = Arc<dyn DenoRtNativeAddonLoader>;
pub trait DenoRtNativeAddonLoader: Send + Sync {
fn load_if_in_vfs(&self, path: &Path) -> Option<Cow<'static, [u8]>>;
fn load_and_resolve_path<'a>(
&self,
path: &'a Path,
) -> std::io::Result<Cow<'a, Path>> {
match self.load_if_in_vfs(&path) {
Some(bytes) => {
let path = std::env::temp_dir().join(format!(
"deno_rt_napi_{}{}",
bytes.len(),
path
.extension()
.map(|e| e.to_string_lossy())
.unwrap_or_else(|| "".into())
));
std::fs::write(&path, bytes).unwrap();
Ok(Cow::Owned(path))
}
None => Ok(Cow::Borrowed(&path)),
}
}
}