secure-exec-sidecar 0.3.0

Native Secure Exec sidecar runtime
Documentation
use crate::bridge::MountPluginContext;

use secure_exec_kernel::mount_plugin::{
    FileSystemPluginFactory, FileSystemPluginRegistry, PluginError,
};

pub(crate) mod google_drive;
pub(crate) mod host_dir;
pub(crate) mod js_bridge;
pub(crate) mod module_access;
pub(crate) mod s3;
pub(crate) mod sandbox_agent;
pub(crate) mod sqlite_vfs;

use google_drive::GoogleDriveMountPlugin;
use host_dir::HostDirMountPlugin;
use js_bridge::JsBridgeMountPlugin;
use module_access::ModuleAccessMountPlugin;
use s3::S3MountPlugin;
use sandbox_agent::SandboxAgentMountPlugin;
use sqlite_vfs::SqliteVfsMountPlugin;

pub(crate) trait SidecarMountPluginFactory<Context>:
    FileSystemPluginFactory<Context>
{
}

impl<Context, T> SidecarMountPluginFactory<Context> for T where T: FileSystemPluginFactory<Context> {}

fn register_plugin<Context>(
    registry: &mut FileSystemPluginRegistry<Context>,
    plugin: impl SidecarMountPluginFactory<Context> + 'static,
) -> Result<(), PluginError> {
    registry.register(plugin)
}

pub(crate) fn register_native_mount_plugins<B>(
    registry: &mut FileSystemPluginRegistry<MountPluginContext<B>>,
) -> Result<(), PluginError> {
    register_plugin(registry, HostDirMountPlugin)?;
    register_plugin(registry, ModuleAccessMountPlugin)?;
    register_plugin(registry, JsBridgeMountPlugin)?;
    register_plugin(registry, SandboxAgentMountPlugin)?;
    register_plugin(registry, SqliteVfsMountPlugin)?;
    register_plugin(registry, S3MountPlugin)?;
    register_plugin(registry, GoogleDriveMountPlugin)?;
    Ok(())
}