Skip to main content

rew_extensions/ext/ffi/
mod.rs

1use super::{ExtensionTrait, web::PermissionsContainer};
2use deno_core::{Extension, extension};
3use std::borrow::Cow;
4
5extension!(
6    init_ffi,
7    esm_entry_point = "ext:init_ffi/init_ffi.js",
8    esm = [ dir "src/ext/ffi", "init_ffi.js" ],
9);
10impl ExtensionTrait<()> for init_ffi {
11  fn init((): ()) -> Extension {
12    init_ffi::init()
13  }
14}
15impl ExtensionTrait<()> for deno_ffi::deno_ffi {
16  fn init((): ()) -> Extension {
17    deno_ffi::deno_ffi::init::<PermissionsContainer>(None)
18  }
19}
20
21pub fn extensions(is_snapshot: bool) -> Vec<Extension> {
22  vec![
23    deno_ffi::deno_ffi::build((), is_snapshot),
24    init_ffi::build((), is_snapshot),
25  ]
26}
27
28impl deno_ffi::FfiPermissions for PermissionsContainer {
29  fn check_partial_no_path(&mut self) -> Result<(), deno_permissions::PermissionCheckError> {
30    self.0.check_exec()?;
31    Ok(())
32  }
33
34  fn check_partial_with_path<'a>(
35    &mut self,
36    path: Cow<'a, std::path::Path>,
37  ) -> Result<Cow<'a, std::path::Path>, deno_permissions::PermissionCheckError> {
38    self.check_partial_no_path()?;
39    let p = self.0.check_read(&path, None)?;
40    Ok(Cow::Owned(p.to_path_buf()))
41  }
42}