pub struct Context<M: MetricsState = DfirMetrics> { /* private fields */ }Expand description
A lightweight context for inline codegen that avoids the overhead of the full scheduled graph (no tokio channels, no scheduler queues, no loop machinery).
Exposes methods that operator-generated code calls on both
df (for prologues: request_task) and
context (for iterators: current_tick, schedule_subgraph, etc.).
§Metrics typestate
The M type parameter is a MetricsState typestate which statically records whether this
context tracks runtime metrics:
Context<DfirMetrics>(the default) is created viaContext::new_with_metricsand holds a sharedRc<DfirMetrics>handle, accessible viaContext::metrics.Context<()>is created viaContext::newand holds no metrics state whatsoever. Themetrics()accessor does not exist on it, so it is a compile error to try to read metrics from a context which never tracked them.
Implementations§
Source§impl Context<()>
impl Context<()>
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new inline context with a fresh wake state and no metrics tracking.
The returned Context<()> statically contains no metrics state. Use
Context::new_with_metrics to create a Context<DfirMetrics> which tracks metrics.
Source§impl Context<DfirMetrics>
impl Context<DfirMetrics>
Sourcepub fn new_with_metrics(metrics: DfirMetrics) -> Self
pub fn new_with_metrics(metrics: DfirMetrics) -> Self
Create a new inline context with a fresh wake state and the given (pre-populated) metrics.
Sourcepub fn metrics(&self) -> &Rc<DfirMetrics>
pub fn metrics(&self) -> &Rc<DfirMetrics>
Returns a reference to the runtime metrics.
Source§impl<M: MetricsState> Context<M>
impl<M: MetricsState> Context<M>
Sourcepub fn request_task<Fut>(&mut self, future: Fut)
Available on crate feature tokio only.
pub fn request_task<Fut>(&mut self, future: Fut)
tokio only.Buffers an async task to be spawned later by Dfir::spawn_tasks.
Tasks are deferred because write_prologue runs during graph construction,
which may occur before a tokio runtime is entered. Buffered tasks are
drained and spawned via [tokio::spawn] at the start of
Dfir::run_tick. Tasks requested after that point remain buffered until
the next call to Dfir::run_tick.
The future must be Send so that the Context remains Send and so the task can be
spawned onto any tokio runtime.
Sourcepub fn current_tick(&self) -> TickInstant
pub fn current_tick(&self) -> TickInstant
Gets the current tick count.
Sourcepub fn schedule_subgraph(&self, is_external: bool)
pub fn schedule_subgraph(&self, is_external: bool)
Signals that external data has arrived and a new tick should be started.
Trait Implementations§
Auto Trait Implementations§
impl<M = DfirMetrics> !RefUnwindSafe for Context<M>
impl<M = DfirMetrics> !Sync for Context<M>
impl<M = DfirMetrics> !UnwindSafe for Context<M>
impl<M> Freeze for Context<M>
impl<M> Send for Context<M>
impl<M> Unpin for Context<M>
impl<M> UnsafeUnpin for Context<M>
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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§impl<T> ToSinkBuild for T
impl<T> ToSinkBuild for T
§fn iter_to_sink_build(self) -> SendIterBuild<Self>
fn iter_to_sink_build(self) -> SendIterBuild<Self>
§fn stream_to_sink_build(self) -> SendStreamBuild<Self>where
Self: Sized + Stream,
fn stream_to_sink_build(self) -> SendStreamBuild<Self>where
Self: Sized + Stream,
SinkBuild] adaptor chain to send all items from self as a [Stream].