pub struct MiddlewareHandler {
pub engine: Arc<Engine>,
pub file_path: String,
pub ast: AST,
}Expand description
Handler for a single Rhai middleware script.
§Why the AST is compiled once at startup
Rhai offers both “compile on every evaluation” and “compile once, re-run
the AST” modes. Middleware is invoked on the hot path (every request),
so we keep the compiled AST alongside the Engine and only evaluate
at request time. This trades a small amount of memory for a large
throughput win and keeps parse errors as startup failures instead of
per-request 500s.
The Engine is wrapped in Arc so that MiddlewareHandler can be
cloned cheaply into each request task without deep-cloning the
interpreter state.
Fields§
§engine: Arc<Engine>§file_path: String§ast: ASTImplementations§
Source§impl MiddlewareHandler
impl MiddlewareHandler
Sourcepub fn new(file_path: &str) -> ServerResult<Self>
pub fn new(file_path: &str) -> ServerResult<Self>
Compile a middleware script from disk into a reusable handler.
Returns an AppError on either a missing file or a compile-time
Rhai parse error. Callers treat both as startup-time failures —
we deliberately do not try to recover by, say, skipping the offending
script, because silently ignoring a misconfigured middleware would
produce confusing request-time behaviour.
Sourcepub async fn handle(
&self,
request_url_path: &str,
request_body_json_value: Option<&Value>,
request_headers: &HeaderMap,
) -> Option<Result<Response<BoxBody>, Error>>
pub async fn handle( &self, request_url_path: &str, request_body_json_value: Option<&Value>, request_headers: &HeaderMap, ) -> Option<Result<Response<BoxBody>, Error>>
Evaluate the middleware for one request.
Returns:
Some(Ok(response))— the script decided to handle the request and produced a response.Some(Err(_))— the script tried to handle the request but the response could not be built (e.g. invalid header value).None— the script returned a value that is neither a string nor a map, which is the convention for “let the next layer handle it”.
§Why errors here are logged and converted, not propagated
A Rhai runtime error during per-request evaluation is a script bug,
not a startup config bug. Turning it into an AppError would
force the whole process down, which is the opposite of what an
HTTP server should do. We instead log and fall through to the
next handler, producing an HTTP response rather than aborting.
Trait Implementations§
Source§impl Clone for MiddlewareHandler
impl Clone for MiddlewareHandler
Source§fn clone(&self) -> MiddlewareHandler
fn clone(&self) -> MiddlewareHandler
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more