pub struct FsResolver { /* private fields */ }Expand description
Sandboxed filesystem Resolver.
Resolves require("lib.helper") to {root}/lib/helper.lua.
Converts module separator to path separator and searches in order:
{root}/{name}.{extension}{root}/{name}/{init_name}.{extension}
Defaults to LuaConvention::LUA54.
Use with_convention() for bulk changes,
or individual methods for partial overrides.
I/O goes through the SandboxedFs trait. Use with_sandbox
to inject test mocks or alternative backends.
§Errors
new() returns InitError::RootNotFound if the root does not exist.
Implementations§
Source§impl FsResolver
impl FsResolver
Sourcepub fn new(root: impl Into<PathBuf>) -> Result<Self, InitError>
pub fn new(root: impl Into<PathBuf>) -> Result<Self, InitError>
Build an FsResolver backed by the real filesystem.
Uses FsSandbox, which rejects any path whose canonical form
escapes root. A symlink under root that points outside it is an
escape by that rule, so package layouts built from symlinks (including
the one mlua-pkg install writes by default) need
new_symlink_aware instead.
| Root contains | Constructor |
|---|---|
| Only real files and directories | new |
| Symlinks to external package sources | new_symlink_aware |
| Untrusted input (TOCTOU matters) | with_sandbox + CapSandbox |
Sourcepub fn new_symlink_aware(root: impl Into<PathBuf>) -> Result<Self, InitError>
pub fn new_symlink_aware(root: impl Into<PathBuf>) -> Result<Self, InitError>
Build an FsResolver that follows symlinks located directly under root.
Uses SymlinkAwareSandbox: targets of those symlinks become
additional allowed roots, so require("pkg") resolves through
root/pkg -> /elsewhere/pkg/init.lua instead of failing with
ResolveError::PathTraversal.
Use this whenever the root is populated by a linking package manager
(mlua-pkg install, npm link, alc_pkg_link) or contains
development convenience symlinks.
use mlua_pkg::resolvers::FsResolver;
let resolver = FsResolver::new_symlink_aware("./blocks")?;§Errors
Returns InitError::RootNotFound if root does not exist.
Sourcepub fn with_sandbox(sandbox: impl SandboxedFs + 'static) -> Self
pub fn with_sandbox(sandbox: impl SandboxedFs + 'static) -> Self
Inject an arbitrary SandboxedFs implementation.
Sourcepub fn with_convention(self, conv: LuaConvention) -> Self
pub fn with_convention(self, conv: LuaConvention) -> Self
Apply a LuaConvention in bulk.
Sourcepub fn with_extension(self, ext: impl Into<String>) -> Self
pub fn with_extension(self, ext: impl Into<String>) -> Self
Change the file extension (default: lua).
Sourcepub fn with_init_name(self, name: impl Into<String>) -> Self
pub fn with_init_name(self, name: impl Into<String>) -> Self
Change the package entry point filename (default: init).
require("pkg") resolves to pkg/{init_name}.{extension}.
Sourcepub fn with_module_separator(self, sep: char) -> Self
pub fn with_module_separator(self, sep: char) -> Self
Change the module name separator (default: .).
require("a{sep}b") is converted to a/b.{extension}.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for FsResolver
impl !UnwindSafe for FsResolver
impl Freeze for FsResolver
impl Send for FsResolver
impl Sync for FsResolver
impl Unpin for FsResolver
impl UnsafeUnpin for FsResolver
Blanket Implementations§
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 more