pub struct Envelope {
pub command: Command,
pub status: Status,
pub dry_run: bool,
pub events: Vec<PatchEvent>,
pub summary: Summary,
pub error: Option<EnvelopeError>,
pub sidecars: Vec<SidecarRecord>,
}Expand description
Top-level JSON envelope emitted by every --json invocation.
Fields§
§command: CommandWhich subcommand produced this output. Lets a generic consumer (one that doesn’t know which subcommand it’s piping) route on it.
status: StatusHigh-level success/failure summary. Use Status::PartialFailure
when at least one event has action = Failed but the run as a
whole completed.
dry_run: boolTrue if the command was a preview (--dry-run, --prune-dry-run,
etc.). When true, events describe what would happen — no disk
state was modified.
events: Vec<PatchEvent>Per-patch (and per-artifact) observations from the run. Ordering is best-effort: events appear in the order the engine produced them, but downstream consumers should not rely on it.
summary: SummaryAggregate counts derived from events. Pre-computed so consumers
don’t need to re-walk the array.
error: Option<EnvelopeError>Set when the command itself failed before producing meaningful
events (manifest unreadable, network unreachable in non-offline
mode, etc.). Implies events is empty.
sidecars: Vec<SidecarRecord>Per-package sidecar fixup records. Each entry describes what
the post-apply integrity fixup did for one package — rewriting
.cargo-checksum.json, deleting .nupkg.metadata, surfacing
an advisory for PyPI / gem / Go, etc.
Top-level (not per-event) so consumers can iterate sidecar
outcomes directly with jq '.sidecars[]'. Records carry
purl so a consumer that needs the matching apply event can
JOIN against events[].
Empty (and omitted from JSON via skip_serializing_if) for
commands that don’t produce sidecar work — rollback,
repair, list, etc. — and for apply runs against ecosystems
with no sidecar contract (e.g. npm).
Implementations§
Source§impl Envelope
impl Envelope
Sourcepub fn new(command: Command) -> Self
pub fn new(command: Command) -> Self
Build a fresh envelope. summary starts at zero — callers are
expected to push events with Envelope::record (or update fields
directly) so summary stays consistent with the event list.
Sourcepub fn record(&mut self, event: PatchEvent)
pub fn record(&mut self, event: PatchEvent)
Append an event and bump the matching summary counter. Centralizes the “events list must agree with summary counts” invariant so per- command code can’t drift.
Recording a Failed event also marks the run as a partial failure
(unless it’s already a hard Error), enforcing the status
invariant documented on Envelope::status here rather than
relying on every command to remember a follow-up
mark_partial_failure call. A run can never end up reporting
Success while carrying a Failed event.
Sourcepub fn record_sidecar(&mut self, sidecar: SidecarRecord)
pub fn record_sidecar(&mut self, sidecar: SidecarRecord)
Append a sidecar fixup record. Called once per ApplyResult
whose sidecar field is Some. Order matches the order
apply processed packages, which is best-effort.
Sourcepub fn mark_partial_failure(&mut self)
pub fn mark_partial_failure(&mut self)
Mark the run as a partial failure. Idempotent.
Sourcepub fn mark_error(&mut self, error: EnvelopeError)
pub fn mark_error(&mut self, error: EnvelopeError)
Mark the run as a top-level error (replaces any prior status).
Sourcepub fn to_pretty_json(&self) -> String
pub fn to_pretty_json(&self) -> String
Serialize as pretty JSON for printing.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Envelope
impl RefUnwindSafe for Envelope
impl Send for Envelope
impl Sync for Envelope
impl Unpin for Envelope
impl UnsafeUnpin for Envelope
impl UnwindSafe for Envelope
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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