pub struct StructuredLogBuilder { /* private fields */ }Expand description
Concurrent accumulator for StructuredLog. Cheap to Clone (the storage
is Arc-shared); the runtime threads it through RuntimeContext and
every emission site forwards through it.
Implementations§
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
pub fn emit_annotate( &self, span: SpanId, shell: &str, marker: &str, text: &str, location: Option<&IrSpan>, )
pub fn emit_log( &self, span: SpanId, shell: &str, marker: &str, message: &str, location: Option<&IrSpan>, )
pub fn emit_warning( &self, span: SpanId, shell: &str, marker: &str, message: &str, location: Option<&IrSpan>, )
pub fn emit_error( &self, span: SpanId, shell: &str, marker: &str, message: &str, location: Option<&IrSpan>, )
Sourcepub fn emit_cancelled(
&self,
span: SpanId,
shell: Option<&str>,
shell_marker: Option<&str>,
reason: &CancelReason,
)
pub fn emit_cancelled( &self, span: SpanId, shell: Option<&str>, shell_marker: Option<&str>, reason: &CancelReason, )
Emit a cancelled event on the span the VM was in when it observed
the cancel token flipping. Carries the reason recorded by whoever
called cancel_with(...). Pushes a C sigil into the per-test
progress sliding window so live TUI viewers see the cancel land
in the same place errors and timeouts do.
Sourcepub fn emit_failure_progress(&self)
pub fn emit_failure_progress(&self)
Push a Failure progress notification only. The structured failure
information is carried in the FailureRecord passed to build().
Sourcepub fn failure_record(&self, failure: &Failure) -> FailureRecord
pub fn failure_record(&self, failure: &Failure) -> FailureRecord
Translate a runtime Failure into a FailureRecord, flattening the
FailureContext enum into the on-disk shape via its accessor
methods. Vm failures produce full diagnostic context; PreVm
failures (effect-resolution errors, pre-VM init, cleanup-shell
spawn) land with the surrounding span and empty stack / tail /
vars - the artifact stays well-formed.
Sourcepub fn cancellation_record(&self, c: &Cancellation) -> CancellationRecord
pub fn cancellation_record(&self, c: &Cancellation) -> CancellationRecord
Translate a runtime Cancellation into a CancellationRecord.
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
pub fn emit_send( &self, span: SpanId, shell: &str, marker: &str, data: &str, location: Option<&IrSpan>, )
pub fn emit_recv( &self, span: SpanId, shell: &str, marker: &str, data: &str, location: Option<&IrSpan>, )
pub fn emit_sleep_start( &self, span: SpanId, shell: &str, marker: &str, duration: Duration, location: Option<&IrSpan>, )
pub fn emit_sleep_done( &self, span: SpanId, shell: &str, marker: &str, location: Option<&IrSpan>, )
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
Sourcepub fn open_span(
&self,
kind: SpanKind,
parent: Option<SpanId>,
location: Option<&IrSpan>,
) -> SpanGuard
pub fn open_span( &self, kind: SpanKind, parent: Option<SpanId>, location: Option<&IrSpan>, ) -> SpanGuard
Open a span and return a guard that closes it on drop. The caller
must keep the guard alive for the span’s lifetime; passing the id
(guard.id()) to children is fine. Drop on ? propagation closes
cleanly; for a tighter end_ts, use SpanGuard::close() explicitly.
Sourcepub fn close_span(&self, id: SpanId)
pub fn close_span(&self, id: SpanId)
Close a span by id. Idempotent - see close_span_inner. Used to
pin a span’s end_ts to its actual semantic boundary when the
owning SpanGuard’s drop point would otherwise be deferred (the
failing-effect path through try_guards! is the canonical case).
Sourcepub fn set_fn_call_result(&self, id: SpanId, result: &str)
pub fn set_fn_call_result(&self, id: SpanId, result: &str)
Attach a return value to an in-flight FnCall span. Called from
exec_call on the success path before the span closes; failed calls
leave result as None so the row title falls back to name/arity.
Sourcepub fn resolve_stack(&self, leaf: SpanId) -> Vec<StackFrame>
pub fn resolve_stack(&self, leaf: SpanId) -> Vec<StackFrame>
Walk parent pointers from leaf back to a root span and return the
frames in root-to-leaf order. Used at failure-construction time to
snapshot the active call chain.
Sourcepub fn open_markers_span(&self, location: Option<&IrSpan>) -> SpanGuard
pub fn open_markers_span(&self, location: Option<&IrSpan>) -> SpanGuard
Open the synthetic markers root span. Always opened (per
design); viewer filters out empty markers roots.
Sourcepub fn open_multimatch_span(
&self,
parent: SpanId,
shell: &str,
location: Option<&IrSpan>,
) -> SpanGuard
pub fn open_multimatch_span( &self, parent: SpanId, shell: &str, location: Option<&IrSpan>, ) -> SpanGuard
Open a multi-match span as a child of parent. Carries the
owning shell’s display name; the viewer keys on this span kind
to apply the observation-vs-drain rule to inner Matched buffer
events.
Sourcepub fn open_marker_eval_span(
&self,
parent: SpanId,
marker_kind: MarkerEvalKind,
modifier: MarkerEvalModifier,
decision: MarkerEvalDecision,
location: Option<&IrSpan>,
) -> SpanGuard
pub fn open_marker_eval_span( &self, parent: SpanId, marker_kind: MarkerEvalKind, modifier: MarkerEvalModifier, decision: MarkerEvalDecision, location: Option<&IrSpan>, ) -> SpanGuard
Open a marker-eval span as a child of a markers root.
Sourcepub fn emit_bool_check(
&self,
span: SpanId,
evaluation: MarkerEvalDetail,
location: Option<&IrSpan>,
) -> EventSeq
pub fn emit_bool_check( &self, span: SpanId, evaluation: MarkerEvalDetail, location: Option<&IrSpan>, ) -> EventSeq
Emit the final truthy/falsy outcome event inside a marker-eval
span. Mirrors the shape stored on MarkerRecording.evaluation.
Returns the emitted event’s EventSeq so callers (e.g. replay_markers)
can use it as a focus pointer.
pub fn record_shell_spawn(&self, marker: &str, name: &str, command: &str)
pub fn record_shell_terminate(&self, marker: &str)
pub fn emit_shell_spawn( &self, span: SpanId, shell: &str, marker: &str, command: &str, location: Option<&IrSpan>, )
pub fn emit_shell_ready( &self, span: SpanId, shell: &str, marker: &str, location: Option<&IrSpan>, )
pub fn emit_shell_switch( &self, span: SpanId, shell: &str, marker: &str, location: Option<&IrSpan>, )
pub fn emit_shell_terminate( &self, span: SpanId, shell: &str, marker: &str, location: Option<&IrSpan>, )
pub fn push_fn_enter(&self, name: &str)
pub fn push_fn_exit(&self)
pub fn push_effect_setup(&self, name: &str)
pub fn push_effect_teardown(&self)
pub fn emit_effect_expose_shell( &self, span: SpanId, name: &str, target: &str, qualifier: Option<&str>, location: Option<&IrSpan>, )
pub fn emit_effect_expose_var( &self, span: SpanId, name: &str, target: &str, qualifier: Option<&str>, value: &str, location: Option<&IrSpan>, )
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
pub fn emit_match_start( &self, span: SpanId, shell: &str, marker: &str, pattern: &str, is_regex: bool, effective: &IrTimeout, location: Option<&IrSpan>, )
Sourcepub fn emit_match_done_record(
&self,
span: SpanId,
shell: &str,
marker: &str,
matched: &str,
elapsed: Duration,
captures: Option<HashMap<String, String>>,
buffer_seq: EventSeq,
location: Option<&IrSpan>,
)
pub fn emit_match_done_record( &self, span: SpanId, shell: &str, marker: &str, matched: &str, elapsed: Duration, captures: Option<HashMap<String, String>>, buffer_seq: EventSeq, location: Option<&IrSpan>, )
Record a structured MatchDone event referencing a buffer event
that was pushed (atomically with the consume operation) by
OutputBuffer::consume_*. The buffer event push is the consumer’s
responsibility - this method only emits the structured event +
progress notification.
pub fn emit_timeout( &self, span: SpanId, shell: &str, marker: &str, pattern: &str, effective: &IrTimeout, location: Option<&IrSpan>, )
pub fn emit_fail_pattern_set( &self, span: SpanId, shell: &str, marker: &str, pattern: &str, is_regex: bool, location: Option<&IrSpan>, )
pub fn emit_fail_pattern_cleared( &self, span: SpanId, shell: &str, marker: &str, location: Option<&IrSpan>, )
pub fn emit_fail_pattern_triggered( &self, span: SpanId, shell: &str, marker: &str, pattern: &str, is_regex: bool, matched_line: &str, location: Option<&IrSpan>, )
pub fn emit_timeout_set( &self, span: SpanId, shell: &str, marker: &str, timeout: &IrTimeout, previous: &IrTimeout, location: Option<&IrSpan>, )
Sourcepub fn emit_multimatch_start(
&self,
span: SpanId,
shell: &str,
marker: &str,
patterns: &[MultiMatchPattern],
effective: &IrTimeout,
location: Option<&IrSpan>,
)
pub fn emit_multimatch_start( &self, span: SpanId, shell: &str, marker: &str, patterns: &[MultiMatchPattern], effective: &IrTimeout, location: Option<&IrSpan>, )
Emit the multi-match-start event for <{ ... }. patterns is in
source order; the runtime will reference these indices from later
multi-match-pattern-done and multi-match-timeout events.
Sourcepub fn emit_multimatch_pattern_done(
&self,
span: SpanId,
shell: &str,
marker: &str,
index: usize,
elapsed: Duration,
buffer_seq: EventSeq,
location: Option<&IrSpan>,
)
pub fn emit_multimatch_pattern_done( &self, span: SpanId, shell: &str, marker: &str, index: usize, elapsed: Duration, buffer_seq: EventSeq, location: Option<&IrSpan>, )
Emit a multi-match-pattern-done event for a single pattern within
an in-flight multimatch block. buffer_seq references the
BufferEventKind::Matched event pushed atomically with the
pattern’s success under the buf lock; that event carries the
matched text and offsets (single source of truth).
Sourcepub fn emit_multimatch_done(
&self,
span: SpanId,
shell: &str,
marker: &str,
advance_to: EventSeq,
location: Option<&IrSpan>,
)
pub fn emit_multimatch_done( &self, span: SpanId, shell: &str, marker: &str, advance_to: EventSeq, location: Option<&IrSpan>, )
Emit a multi-match-done event - the block satisfied every
pattern. advance_to references the per-pattern Matched buffer
event whose match ends farthest in the buffer (the single drain
the runtime applies at block exit advances the cursor by
len(before) + len(matched) of that referenced event).
Sourcepub fn emit_multimatch_timeout(
&self,
span: SpanId,
shell: &str,
marker: &str,
unmatched: &[usize],
location: Option<&IrSpan>,
)
pub fn emit_multimatch_timeout( &self, span: SpanId, shell: &str, marker: &str, unmatched: &[usize], location: Option<&IrSpan>, )
Emit a multi-match-timeout event - the block deadline expired
with at least one pattern still unmatched. unmatched is a list
of indices into the original MultiMatchStart.patterns vec.
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
pub fn emit_var_let( &self, span: SpanId, shell: Option<&str>, marker: Option<&str>, name: &str, value: &str, location: Option<&IrSpan>, )
pub fn emit_var_assign( &self, span: SpanId, shell: &str, marker: &str, name: &str, value: &str, previous: &str, location: Option<&IrSpan>, )
pub fn emit_string_eval( &self, span: SpanId, shell: &str, marker: &str, result: &str, location: Option<&IrSpan>, )
Sourcepub fn emit_interpolation(
&self,
span: SpanId,
shell: Option<&str>,
marker: Option<&str>,
template: &str,
result: &str,
bindings: &[(String, String)],
location: Option<&IrSpan>,
)
pub fn emit_interpolation( &self, span: SpanId, shell: Option<&str>, marker: Option<&str>, template: &str, result: &str, bindings: &[(String, String)], location: Option<&IrSpan>, )
Emit an interpolation event. Shell callers pass Some(shell) /
Some(marker); pure callers (LogSink) pass None / None.
Sourcepub fn emit_var_read(
&self,
span: SpanId,
name: &str,
value: &str,
location: Option<&IrSpan>,
)
pub fn emit_var_read( &self, span: SpanId, name: &str, value: &str, location: Option<&IrSpan>, )
Pure variable-read event. Used by LogSink to surface bare
${X}-style reads that resolve against scope/env. The result
is the resolved string ("" when the var is undefined).
Sourcepub fn emit_pure_match_start(
&self,
span: SpanId,
shell: Option<&str>,
marker: Option<&str>,
value: &str,
pattern: &str,
is_regex: bool,
location: Option<&IrSpan>,
)
pub fn emit_pure_match_start( &self, span: SpanId, shell: Option<&str>, marker: Option<&str>, value: &str, pattern: &str, is_regex: bool, location: Option<&IrSpan>, )
Pure string-match attempt. Emitted before a marker ?/= or a
pure-match statement runs. Shell-bound callers (a pure-match statement
inside a shell block) pass Some(shell) / Some(marker); shell-less
callers (marker replay, test/effect preambles) pass None / None.
Sourcepub fn emit_pure_match_done(
&self,
span: SpanId,
shell: Option<&str>,
marker: Option<&str>,
matched: &str,
captures: &HashMap<String, String>,
location: Option<&IrSpan>,
)
pub fn emit_pure_match_done( &self, span: SpanId, shell: Option<&str>, marker: Option<&str>, matched: &str, captures: &HashMap<String, String>, location: Option<&IrSpan>, )
Pure string-match success. Shell context is threaded the same way as
Self::emit_pure_match_start.
Sourcepub fn emit_pure_match_failed(
&self,
span: SpanId,
shell: Option<&str>,
marker: Option<&str>,
location: Option<&IrSpan>,
)
pub fn emit_pure_match_failed( &self, span: SpanId, shell: Option<&str>, marker: Option<&str>, location: Option<&IrSpan>, )
Pure string-match failure (no match). Shell context is threaded the same
way as Self::emit_pure_match_start.
Source§impl StructuredLogBuilder
impl StructuredLogBuilder
pub fn new( progress_tx: ProgressTx, test_start: Instant, sources: SourceTable, project_root: Arc<Path>, ) -> Self
Sourcepub fn current_seq(&self) -> EventSeq
pub fn current_seq(&self) -> EventSeq
Latest emitted seq, or 0 if no event has fired yet. Failures use
this to point the structured-log artifact at the most recent event
(typically a Timeout or FailPatternTriggered).
pub fn push_event( &self, span: SpanId, shell: Option<&str>, shell_marker: Option<&str>, location: Option<&IrSpan>, kind: EventKind, ) -> EventSeq
pub fn push_buffer_event( &self, shell: &str, shell_marker: &str, kind: BufferEventKind, ) -> EventSeq
pub fn build( self, info: TestInfo, env: EnvInfo, outcome: TestOutcome, artifacts: Vec<ArtifactEntry>, ) -> StructuredLog
Trait Implementations§
Source§impl Clone for StructuredLogBuilder
impl Clone for StructuredLogBuilder
Source§fn clone(&self) -> StructuredLogBuilder
fn clone(&self) -> StructuredLogBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for StructuredLogBuilder
impl RefUnwindSafe for StructuredLogBuilder
impl Send for StructuredLogBuilder
impl Sync for StructuredLogBuilder
impl Unpin for StructuredLogBuilder
impl UnsafeUnpin for StructuredLogBuilder
impl UnwindSafe for StructuredLogBuilder
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);