rustyscript 0.12.3

Effortless JS Integration for Rust
Documentation
use std::{borrow::Cow, path::Path};

use deno_core::{extension, Extension};

use super::{web::PermissionsContainer, ExtensionTrait};

extension!(
    init_ffi,
    deps = [rustyscript],
    esm_entry_point = "ext:init_ffi/init_ffi.js",
    esm = [ dir "src/ext/ffi", "init_ffi.js" ],
);
impl ExtensionTrait<()> for init_ffi {
    fn init((): ()) -> Extension {
        init_ffi::init()
    }
}
impl ExtensionTrait<()> for deno_ffi::deno_ffi {
    fn init((): ()) -> Extension {
        deno_ffi::deno_ffi::init::<PermissionsContainer>(None)
    }
}

pub fn extensions(is_snapshot: bool) -> Vec<Extension> {
    vec![
        deno_ffi::deno_ffi::build((), is_snapshot),
        init_ffi::build((), is_snapshot),
    ]
}

impl deno_ffi::FfiPermissions for PermissionsContainer {
    fn check_partial_no_path(&mut self) -> Result<(), deno_permissions::PermissionCheckError> {
        self.0.check_exec()?;
        Ok(())
    }

    fn check_partial_with_path<'a>(
        &mut self,
        path: Cow<'a, Path>,
    ) -> Result<Cow<'a, Path>, deno_permissions::PermissionCheckError> {
        self.check_partial_no_path()?;
        let p = self.0.check_read(path, None)?;
        Ok(p)
    }
}