pub struct PluginManager { /* private fields */ }Expand description
Plugin manager that caches loaded plugins.
Implementations§
Source§impl PluginManager
impl PluginManager
Sourcepub const fn with_config(config: RuntimeConfig) -> Self
pub const fn with_config(config: RuntimeConfig) -> Self
Create a plugin manager with custom configuration.
Sourcepub fn load_bytes(
&mut self,
name: impl Into<String>,
bytes: &[u8],
) -> Result<usize>
pub fn load_bytes( &mut self, name: impl Into<String>, bytes: &[u8], ) -> Result<usize>
Load a plugin from bytes.
Sourcepub fn register_wasm_dir(
&mut self,
dir: impl AsRef<Path>,
) -> Result<WasmPluginDirScanReport>
pub fn register_wasm_dir( &mut self, dir: impl AsRef<Path>, ) -> Result<WasmPluginDirScanReport>
Scan dir for *.wasm files (one level only — no recursion)
and register each as a plugin.
Files are loaded in sorted order so multi-plugin pipelines have
deterministic ordering across filesystems and platforms.
Extension matching is case-insensitive — foo.wasm and
BAR.WASM are both picked up.
Loading is skip-and-collect: every loadable module is
registered; failures are accumulated in
WasmPluginDirScanReport::failures so the caller can decide
whether to log them, abort, or ignore. A single broken module
in a dir with 19 good ones doesn’t prevent the 19 from
loading. Mirrors ImporterRegistry::register_wasm_dir in
rustledger-importer.
Non-.wasm files (a README.md or .gitignore) and
subdirectories are silently skipped. Entries whose metadata
can’t be read at all (broken symlinks; the file existed in
read_dir’s listing but path.is_file() returns false) are
also silently skipped — std::fs::DirEntry::path().is_file()
swallows the underlying I/O error. If that matters for your
use case, walk the dir yourself with explicit
symlink_metadata checks.
§Errors
The outer Result reports an I/O error reading dir itself
(dir doesn’t exist, permission denied on the dir). Per-file
load failures land inside the report’s failures vec so the
caller can surface them without aborting the rest of the scan.
Sourcepub fn execute(&self, index: usize, input: &PluginInput) -> Result<PluginOutput>
pub fn execute(&self, index: usize, input: &PluginInput) -> Result<PluginOutput>
Execute a plugin by index.
Sourcepub fn execute_all(&self, input: PluginInput) -> Result<PluginOutput>
pub fn execute_all(&self, input: PluginInput) -> Result<PluginOutput>
Execute all loaded plugins in sequence.
Note: because the ops protocol references the plugin’s input
indices and execute_all chains plugins by materializing each
stage’s ops before feeding the next, the final ops returned
here describe the result relative to the original input as a
rebuild: every output directive is encoded as
PluginOp::Insert and every original input is encoded as
PluginOp::Delete. Loader callers don’t go through this
path — they apply ops one plugin at a time — so this simplifies
the multi-plugin WASM-runtime case to “here’s the resulting
directive list” without losing the protocol’s invariants.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for PluginManager
impl !UnwindSafe for PluginManager
impl Freeze for PluginManager
impl Send for PluginManager
impl Sync for PluginManager
impl Unpin for PluginManager
impl UnsafeUnpin for PluginManager
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.