Skip to main content

ConsumeOutcome

Enum ConsumeOutcome 

Source
pub enum ConsumeOutcome<R> {
    Handled(TrustTask<R>),
    Rejected(TrustTask<ErrorPayload>),
    Suppressed,
    Duplicate {
        prior_response: Option<Value>,
        in_flight: bool,
    },
}
Expand description

Possible outcomes of consume_inbound.

Variants§

§

Handled(TrustTask<R>)

The document passed every framework check and the caller’s handler produced a success response. The caller emits the response over the same transport that delivered the request.

§

Rejected(TrustTask<ErrorPayload>)

A framework check failed and the rejection has a routable recipient, OR the caller’s handler returned an ErrorResponse of its own. Either way the document is already addressed per SPEC.md §8.1 — the caller emits it over the transport.

§

Suppressed

SPEC.md §8.1 routing rule for identity_mismatch: the in-band issuer is by definition the contested identity, and the transport authenticated no sender, so the consumer SHOULD NOT emit any response (doing so would constitute an oracle).

Callers SHOULD log this case for audit — silent suppression is the spec rule but invisible suppression is an ops footgun.

§

Duplicate

SPEC.md §7.2 item 11: a document with this id and this content was already accepted for execution. The handler was not called, and the consequential effect did not happen a second time. This is the §8.4 retry being absorbed, which is the outcome that makes retrying safe.

This is not an error. §7.2 (Disposition of a duplicate): “In no case is a duplicate reported as taskFailed; the task did not fail, it already happened.” A caller that folded this into Rejected would report a failure that did not occur, and would tell the producer to investigate a working system.

What to emit:

  • prior_response present — emit it. It is the response document the first execution produced (a success response, or a non-retryable error response; tell them apart by its type), which §7.2 says the consumer SHOULD return.
  • prior_response absent, in_flight == false — the specification defines no success response (§4.4.1’s fire-and-forget case) or the guard retains none. Emit nothing: “there is nothing to return: the consumer declines to execute again and that silence is the correct disposition, not an error.”
  • in_flight == true — the original execution has not finished. §7.2: “the consumer SHOULD return or expose the existing execution state rather than begin another.”

Fields

§prior_response: Option<Value>

The response the first execution produced, if the ReplayGuard retained one.

§in_flight: bool

Whether that first execution is still running.

Trait Implementations§

Source§

impl<R> Debug for ConsumeOutcome<R>
where R: Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<R> Freeze for ConsumeOutcome<R>
where TrustTask<R>: Freeze,

§

impl<R> RefUnwindSafe for ConsumeOutcome<R>

§

impl<R> Send for ConsumeOutcome<R>
where TrustTask<R>: Send,

§

impl<R> Sync for ConsumeOutcome<R>
where TrustTask<R>: Sync,

§

impl<R> Unpin for ConsumeOutcome<R>
where TrustTask<R>: Unpin,

§

impl<R> UnsafeUnpin for ConsumeOutcome<R>

§

impl<R> UnwindSafe for ConsumeOutcome<R>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> At for T

Source§

fn at<M>(self, metadata: M) -> Meta<T, M>

Wraps self inside a Meta<Self, M> using the given metadata. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> BorrowStripped for T

Source§

fn stripped(&self) -> &Stripped<T>

Source§

impl<T> BorrowUnordered for T

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, C> FromWithContext<T, C> for T

Source§

fn from_with(value: T, _context: &C) -> T

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T, U, C> IntoWithContext<U, C> for T
where U: FromWithContext<T, C>,

Source§

fn into_with(self, context: &C) -> U

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ResourceProvider<()> for T

Source§

fn get_resource(&self) -> &()

Returns a reference to the resource of type T.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T

Source§

type Owned = T

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U, C> TryFromWithContext<U, C> for T
where U: IntoWithContext<T, C>,

Source§

type Error = !

Source§

fn try_from_with( value: U, context: &C, ) -> Result<T, <T as TryFromWithContext<U, C>>::Error>

Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U, C> TryIntoWithContext<U, C> for T
where U: TryFromWithContext<T, C>,

Source§

type Error = <U as TryFromWithContext<T, C>>::Error

Source§

fn try_into_with( self, context: &C, ) -> Result<U, <T as TryIntoWithContext<U, C>>::Error>

Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithContext for T
where T: ?Sized,

Source§

fn with<C>(&self, context: C) -> Contextual<&T, C>

Source§

fn into_with<C>(self, context: C) -> Contextual<T, C>
where T: Sized,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more