Skip to main content

Harness

Struct Harness 

Source
pub struct Harness { /* private fields */ }
Expand description

A built harness: immutable after build().

Implementations§

Source§

impl Harness

Source

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.

Source

pub fn builder() -> HarnessBuilder

Source

pub fn venture(&self) -> &Arc<Venture> ⓘ

Source

pub fn modules(&self) -> &[Arc<dyn Module>]

Source

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.

Source

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.

Source

pub fn templates(&self) -> &Arc<TemplateRegistry> ⓘ

Source

pub fn events(&self) -> &EventBus

Source

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.

Source

pub fn runtime(&self) -> Option<&Arc<dyn Runtime>>

The runtime this harness was validated against, if one was supplied.

Source

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.

Source

pub fn router(&self, ports: Ports) -> Router

Trait Implementations§

Source§

impl Debug for Harness

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more