pub struct LuaRuntime {
source: String,
modules_path: Option<PathBuf>,
timeout_ms: u64,
}Expand description
Holds a validated Lua script and executes it against a Context.
A fresh Lua VM is created for every execution, so scripts cannot leak state between requests; only the source text is retained between calls.
Fields§
§source: StringThe full script source, re-loaded into a fresh VM per execution.
modules_path: Option<PathBuf>Directory the sandboxed require resolves modules from; None
disables require.
timeout_ms: u64Configured execution timeout in milliseconds (currently stored but not enforced by the VM).
Implementations§
Source§impl LuaRuntime
impl LuaRuntime
Sourcepub fn new(
source: &str,
timeout_ms: u64,
modules_path: Option<PathBuf>,
) -> Result<Self, String>
pub fn new( source: &str, timeout_ms: u64, modules_path: Option<PathBuf>, ) -> Result<Self, String>
Compiles and validates the script in a throwaway VM, failing early if
the source has syntax errors, its top level errors on load, or it does
not define a global execute function. This runs once at
policy-compile time, not per request.
Sourcepub fn execute(&self, ctx: Context) -> Result<Context, PluginExecutionError>
pub fn execute(&self, ctx: Context) -> Result<Context, PluginExecutionError>
Runs the script’s execute(ctx) against the given context in a fresh
VM and returns the context rebuilt from the table the script returned.
Every failure mode (load, marshalling either way, missing execute,
or a runtime error raised by the script) returns a
PluginExecutionError carrying the original context, with a
distinguishing error code (LUA_LOAD_ERROR, LUA_MARSHAL_ERROR,
LUA_MISSING_EXECUTE, LUA_EXECUTION_ERROR, LUA_UNMARSHAL_ERROR),
so the graph engine routes through the error port exactly like a
native plugin failure.
Auto Trait Implementations§
impl Freeze for LuaRuntime
impl RefUnwindSafe for LuaRuntime
impl Send for LuaRuntime
impl Sync for LuaRuntime
impl Unpin for LuaRuntime
impl UnsafeUnpin for LuaRuntime
impl UnwindSafe for LuaRuntime
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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