pub struct Harness { /* private fields */ }Expand description
A built harness: immutable after build().
Implementations§
Source§impl Harness
impl Harness
Sourcepub fn clone_arc(self: &Arc<Self>) -> Arc<Self> ⓘ
pub fn clone_arc(self: &Arc<Self>) -> Arc<Self> ⓘ
Cheap shared handle: composition is Arc fields, so the only
sensible clone is the Arc itself. The reconciler hands one
Arc to every tenant task it fans out.
pub fn builder() -> HarnessBuilder
pub fn venture(&self) -> &Arc<Venture> ⓘ
pub fn modules(&self) -> &[Arc<dyn Module>]
Sourcepub fn actor_handlers(&self) -> &ActorHandlers
pub fn actor_handlers(&self) -> &ActorHandlers
The actor handlers registered at build (issue #583), by kind, so an in-process actor host can be built from the registrations.
Sourcepub fn max_body_bytes(&self, path: &str, cfg: &dyn Config) -> usize
pub fn max_body_bytes(&self, path: &str, cfg: &dyn Config) -> usize
The largest body a runtime may buffer for the route at path,
answerable before any byte of it has been read (issue #440).
DefaultBodyLimit inside router() is the precise per-route
enforcer, but it fires only once the body is already resident — too
late for a runtime that must buffer into a fixed memory ceiling (a
Workers isolate). This is the coarse pre-buffer ceiling that runtime
consults instead: for a path of the form /v1/<name> or
/v1/<name>/... it is the named module’s Module::max_body_bytes,
and for everything else — an unknown module, /ui/*, /__events,
/.well-known/*, or any path outside /v1 — MAX_BODY_BYTES.
The result is floored at MAX_BODY_BYTES even for the module
routes: a module may raise the ceiling for a route (LinkedIn’s image
upload), but the runtime guard sits in front of the router, and a
module that tightened it below what the router itself accepts would
413 working requests.
path is the URL path only — what url.path() returns. A query
string is tolerated and ignored, and empty segments from a leading,
trailing or doubled slash are collapsed; /v1 with no module
segment is simply the default ceiling.
Sourcepub fn streaming_route(&self, path: &str, method: &Method) -> Option<usize>
pub fn streaming_route(&self, path: &str, method: &Method) -> Option<usize>
The streaming route that serves method at path, if the module
mounted there declared one — answering its own
StreamRoute::max_bytes ceiling (issue #585).
The counterpart of Harness::max_body_bytes on the streaming side:
a runtime consults this before reading a body, to know whether
the route streams (and with what ceiling) or buffers, exactly as
max_body_bytes tells it how much a buffered route may hold. The
ceiling is returned verbatim — a streaming route’s max_bytes is the
precise per-route limit, not a coarse pre-buffer guard, so it is not
floored at MAX_BODY_BYTES.
Path normalisation is exact, not Harness::max_body_bytes’: a query
or fragment is ignored, but empty segments are not collapsed, so a
trailing or doubled slash matches no route — the request then keeps
its buffered body and axum’s own 404, exactly as without streaming.
path is the URL path only; method is the request’s.
pub fn templates(&self) -> &Arc<TemplateRegistry> ⓘ
pub fn events(&self) -> &EventBus
Sourcepub fn module_context(
&self,
module: &dyn Module,
ports: &Ports,
) -> ModuleContext
pub fn module_context( &self, module: &dyn Module, ports: &Ports, ) -> ModuleContext
Builds the context a module sees: its declared ports (view), the
config, the shared bus, templates and venture. router() uses this
per module; cratefield-runtime-cloudflare uses it for scheduled
fan-out.
Sourcepub fn runtime(&self) -> Option<&Arc<dyn Runtime>>
pub fn runtime(&self) -> Option<&Arc<dyn Runtime>>
The runtime this harness was validated against, if one was supplied.
Sourcepub fn surface(&self) -> &SurfaceDocument
pub fn surface(&self) -> &SurfaceDocument
The composed UI surface, admin actions included, for tooling
(fz, the control plane). GET /__surface serves the same
document, public subset unless the admin bearer is presented.