rew_extensions/ext/ffi/
mod.rs

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