pub enum EffectReplay {
Done {
output: Value,
source: Option<String>,
by: Option<Operator>,
spend: Spend,
declared: DeclaredOutput,
content: Option<ContentVerdict>,
},
Failed {
error: String,
disposition: Disposition,
spend: Spend,
permanent: bool,
},
Refused {
limit: String,
used: String,
},
Denied {
reason: String,
action: String,
resource: String,
},
Withheld {
subject: String,
reason: String,
},
Orphan {
recovery: Recovery,
},
}Expand description
What the journal has to say about one effect.
Variants§
Done
It completed; here is what it returned, and what it cost.
The figure is recorded rather than recomputed, so a replayed run reaches the same budget verdict at the same point as the original.
Fields
source: Option<String>Who sent it, when the effect was an awaited inbound event.
Carried so a replayed run rebuilds the same provenance the live one had. Without it the two label the same value differently, and every taint gate downstream may reach a different verdict.
by: Option<Operator>The operator this plane minted the awaited event for, when it did.
Read back so a wait can hold an answer to the act it names — a worklist decision’s decider must be the operator the decision was recorded under — on replay exactly as live.
declared: DeclaredOutputThe trust and sensitivity the effect declared when it landed.
Read back for the same reason the spend is, and with a sharper consequence: these two are sourced from operator configuration rather than from code, so re-deriving them lets a catalogue edit relabel a value the run read months ago — with nothing diverging, because nothing about the call changed.
content: Option<ContentVerdict>What the content rules decided when the output arrived: a refusal the step is handed again, a classification its label is joined with. Read back so no rule is evaluated on replay.
Failed
It failed, and the failure is part of history — including what that failure said about whether the call reached the outside world.
Fields
disposition: DispositionRefused
A limit refused it before it started.
Distinct from Failed: nothing was attempted, and the run stopped
because it was told to rather than because something broke.
Denied
Policy refused it before it was attempted.
Distinct from Refused, which is a limit. Both stop the run without
attempting anything, and an operator’s response to each is different: a
budget is raised, a policy is argued with.
Withheld
The run’s authority was withdrawn at this hop, before it was announced.
Distinct from Refused: not a limit the run reached but a principal an
operator withdrew, and the run pauses until the halt is lifted.
Orphan
It started and we do not know whether it landed.
The recorded Recovery is what decides whether re-performing it is
safe. What history asked for is not here: it is on every entry rather
than on this one variant, because the question what did the run do at
this position is what a divergence has to answer, and a divergence can
land on any of them.
Implementations§
Source§impl EffectReplay
impl EffectReplay
Trait Implementations§
Source§impl Clone for EffectReplay
impl Clone for EffectReplay
Source§impl Debug for EffectReplay
impl Debug for EffectReplay
Source§impl PartialEq for EffectReplay
impl PartialEq for EffectReplay
impl StructuralPartialEq for EffectReplay
Auto Trait Implementations§
impl Freeze for EffectReplay
impl RefUnwindSafe for EffectReplay
impl Send for EffectReplay
impl Sync for EffectReplay
impl Unpin for EffectReplay
impl UnsafeUnpin for EffectReplay
impl UnwindSafe for EffectReplay
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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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