Skip to main content

StartPrecondition

Struct StartPrecondition 

Source
pub struct StartPrecondition {
    pub workflow: WorkflowKey,
    pub phases: Vec<Value>,
    pub reason: LocalizedText,
}
Expand description

What must already be true of another case before this workflow may be started.

§Why a declaration

A projector is pure and cannot read another case, and the executor is the wrong place for a domain rule about when a case may exist: «a traveler is registered only while a trip is open» belongs to neither. The workflow declares what it needs; the runtime, which has the other cases in hand already, decides whether it is there.

§What it costs when it is not met

The start act is not offered at all, so it cannot be proposed and cannot be refused later. The reason travels in the catalogue instead, which is the honest limit of this shape: with no act there is no refusal to attach a notice to, so whether the user hears why depends on the sentence the writing stage produces. A deployment that needs the reason guaranteed should keep an operation that refuses it rather than one that is absent.

Fields§

§workflow: WorkflowKey

The workflow the required case belongs to.

§phases: Vec<Value>

The phases that satisfy it, as that workflow’s phase serializes.

§reason: LocalizedText

Why, in words a user can read, when it is not met.

Implementations§

Source§

impl StartPrecondition

Source

pub fn new( workflow: impl Into<WorkflowKey>, phases: impl IntoIterator<Item = Value>, reason: LocalizedText, ) -> Self

Requires a case of workflow to be in one of phases, already serialized.

The infallible primitive. Prefer Self::requires, which takes the other workflow’s own phase type so the compiler checks the spelling.

Source

pub fn requires<P: Serialize>( workflow: impl Into<WorkflowKey>, phases: &[P], reason: LocalizedText, ) -> Result<Self, HashError>

Requires a case of workflow to be in one of phases.

The phases are serialized here, so an adopter names them with the other workflow’s own type and the compiler checks the spelling.

§Errors

HashError when a phase does not serialize, which is the workflow’s own type failing to round-trip.

Source

pub fn satisfied_by(&self, view: &ErasedWorkflowView) -> bool

Whether view is a case that satisfies this precondition.

Trait Implementations§

Source§

impl Clone for StartPrecondition

Source§

fn clone(&self) -> Self

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 StartPrecondition

Source§

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

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

impl<'de> Deserialize<'de> for StartPrecondition

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 StartPrecondition

Source§

impl PartialEq for StartPrecondition

Source§

fn eq(&self, other: &Self) -> 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 StartPrecondition

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 StartPrecondition

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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, !>

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.