Skip to main content

SendSettlements

Trait SendSettlements 

Source
pub trait SendSettlements: Sized {
    type Settlements: Send + ClassifySettlement;
    type SourceCustody: Send;
    type InterpretationCustody;

    // Required methods
    fn prepare_interpretation(
        progress: &mut Option<InterpretationProgress<Self, Self::InterpretationCustody, Self::Settlements>>,
    );
    fn finish_interpretation(
        progress: &mut Option<InterpretationProgress<Self, Self::InterpretationCustody, Self::Settlements>>,
    );
    fn unattempted(
        progress: &mut Option<InterpretationProgress<Self, Self::InterpretationCustody, Self::Settlements>>,
    );
}
Expand description

Static settlement product determined solely by one concrete sends value.

Every action item declares its own accepted, rejection, and prerequisite types. A containing product therefore has one settlement type under every conforming interpreter. unattempted preserves every item untouched after an earlier corrupt item stops traversal.

A runtime cannot select another settlement product for the same sends value:

ⓘ
struct RuntimeSettlement;

fn runtime_selected<Runtime>(
    progress: &mut Option<behavior::InterpretationProgress<
        behavior::InterpreterRequests<behavior::ReportToParent<u8>>,
        <behavior::InterpreterRequests<behavior::ReportToParent<u8>> as
            behavior::SendSettlements>::InterpretationCustody,
        RuntimeSettlement,
    >>,
    runtime: &mut Runtime,
) -> impl core::future::Future<Output = ()> + Send
where
    Runtime: behavior::InterpretItem<
        behavior::ReportToParent<u8>,
        (),
        behavior::Here,
    >,
{
    <behavior::InterpreterRequests<behavior::ReportToParent<u8>> as
        behavior::InterpretSends<Runtime, (), behavior::Here>>::interpret(
            progress,
            runtime,
        )
}

Required Associated Types§

Required Methods§

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl SendSettlements for Vec<Never>

Source§

impl<Item> SendSettlements for Vec<Item>
where Item: ActionItem,

Implementors§

Source§

impl SendSettlements for NoSends

Source§

impl<Item> SendSettlements for SourceActions<Item>
where Item: SourceAction,

Source§

impl<Owned, Inner> SendSettlements for SendLayer<Owned, Inner>
where Owned: SendSettlements, Inner: SendSettlements,

Source§

impl<Request> SendSettlements for InterpreterRequests<Request>
where Request: ActionItem,

Source§

type Settlements = Vec<SettledItem<Request, ItemSettlement<Request, <Request as ActionItem>::Accepted, <Request as ActionItem>::Rejection, <Request as ActionItem>::Prerequisite>>>

Source§

type SourceCustody = (<InterpreterRequests<Request> as SendSettlements>::Settlements, IntoIter<SettledItem<Request, ItemSettlement<Request, <Request as ActionItem>::Accepted, <Request as ActionItem>::Rejection, <Request as ActionItem>::Prerequisite>>>)

Source§

type InterpretationCustody = Vec<Option<InterpretationProgress<Request, <Request as ActionItem>::Custody, ItemSettlement<Request, <Request as ActionItem>::Accepted, <Request as ActionItem>::Rejection, <Request as ActionItem>::Prerequisite>>>>