pub enum Reconciliation<T> {
Landed(T),
DidNotHappen,
Inconclusive,
}Expand description
What a reconciliation probe established about a call whose outcome was unknown.
This is how an undecidable case becomes decidable: instead of assuming the call is safe to repeat, ask the provider what happened. Every serious provider supports it — retrieving a payment intent by id, querying a transfer by reference — and it is strictly better than the alternatives, because it produces an answer rather than a bet.
Variants§
Landed(T)
It landed, and here is the result, recovered from the provider.
The effect is complete. Nothing is re-performed, and the recovered output is journaled as this effect’s outcome.
DidNotHappen
It never landed. Performing it now is safe.
Inconclusive
The probe could not tell.
Not a failure of the probe so much as an honest answer, and it leaves the run exactly where it was: undecidable, and escalated rather than guessed at.
Implementations§
Source§impl<T> Reconciliation<T>
impl<T> Reconciliation<T>
Sourcepub fn disposition(&self) -> Disposition
pub fn disposition(&self) -> Disposition
The probe’s answer in the same vocabulary a failure uses, because it is the same question.
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for Reconciliation<T>where
T: Freeze,
impl<T> RefUnwindSafe for Reconciliation<T>where
T: RefUnwindSafe,
impl<T> Send for Reconciliation<T>where
T: Send,
impl<T> Sync for Reconciliation<T>where
T: Sync,
impl<T> Unpin for Reconciliation<T>where
T: Unpin,
impl<T> UnsafeUnpin for Reconciliation<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for Reconciliation<T>where
T: UnwindSafe,
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> 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