Skip to main content

CarryContract

Struct CarryContract 

Source
pub struct CarryContract { /* private fields */ }
Expand description

The carry a workloop threads from one generation to the next, and the DEFAULTS that seed generation 1 (R-carry).

§🔴 WHY DEFAULTS ARE A CONTRACT AND NOT A CONVENIENCE

A workloop’s iteration body reads its carry fields unconditionally — the generated input codec requires them. Every generation after the first gets them from the previous iteration’s route start payload. Generation 1 has no previous iteration, so unless something seeds those fields the very first run of a loop fails to decode its own input: a start payload that passes schema admission and is then unreadable by the workflow it was admitted for.

Seeding is therefore the engine’s job at the START, not the author’s job at every call site — an operator starting a loop cannot be expected to know which fields the compiled codec will demand.

§🔴 CALLER VALUES WIN

The merge is default-filling, never overwriting: a field the caller supplied keeps the caller’s value. A default that clobbered an explicit start value would make the declaration silently override the operator.

Implementations§

Source§

impl CarryContract

Source

pub fn none() -> Self

A loop that declares no carry: nothing to seed.

Source

pub fn new(defaults: BTreeMap<String, Value>) -> Result<Self, WorkloopSpecError>

Builds a carry contract from declared field defaults.

§Errors

Refuses an empty field name (WorkloopSpecError::EmptyCarryField).

Source

pub const fn defaults(&self) -> &BTreeMap<String, Value>

The declared field defaults.

Source

pub fn is_empty(&self) -> bool

Whether this loop declares any carry at all.

Source

pub fn seed(&self, input: &Payload) -> Result<Payload, WorkloopSpecError>

Merge the declared defaults into a generation-1 start payload.

Returns the payload unchanged when nothing is declared. Caller-supplied fields are preserved; only ABSENT fields are filled.

§Errors

Refuses a start payload that is not a JSON object (WorkloopSpecError::CarrySeedTargetNotAnObject) — there is nowhere to put a named field in a scalar or an array, and silently dropping the seed would reproduce the very decode failure seeding exists to prevent.

Trait Implementations§

Source§

impl Clone for CarryContract

Source§

fn clone(&self) -> CarryContract

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CarryContract

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for CarryContract

Source§

fn default() -> CarryContract

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CarryContract

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for CarryContract

Source§

impl PartialEq for CarryContract

Source§

fn eq(&self, other: &CarryContract) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for CarryContract

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for CarryContract

Auto Trait Implementations§

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> 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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, <T as TryFrom<U>>::Error>

Performs the conversion.
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.