Skip to main content

CommandContext

Struct CommandContext 

Source
pub struct CommandContext {
    pub correlation_id: CorrelationId,
    pub conversation_id: ConversationId,
    pub process_id: ProcessId,
    pub tenant_id: TenantId,
    pub workflow_id: WorkflowId,
    pub causation_id: Option<CausationId>,
}
Expand description

Contextual metadata attached to every command dispatch.

The engine stamps this information onto every event produced by the command. Callers provide the process identity; the engine generates correlation IDs automatically unless provided explicitly.

Fields§

§correlation_id: CorrelationId§conversation_id: ConversationId§process_id: ProcessId

The MaKo process instance this command targets.

§tenant_id: TenantId

The tenant that issued this command.

§workflow_id: WorkflowId

The workflow version to use for processing.

§causation_id: Option<CausationId>

The immediate cause of this command, if driven by a prior event.

Implementations§

Source§

impl CommandContext

Source

pub fn new( tenant_id: TenantId, process_id: ProcessId, workflow_id: WorkflowId, ) -> Self

Construct a context with auto-generated correlation and conversation IDs.

Source

pub fn with_causation(self, id: CausationId) -> Self

Set an explicit causation ID (e.g. the ID of the event that triggered this command).

Source

pub fn with_correlation(self, id: CorrelationId) -> Self

Override the auto-generated correlation ID.

Use this to propagate a correlation ID from an inbound EDIFACT message so all resulting events share the same root correlation.

Source

pub fn with_conversation(self, id: ConversationId) -> Self

Override the auto-generated conversation ID.

Use this to link the outbound APERAK to the same conversation as the UTILMD that triggered it, so the full message exchange is traceable as a unit.

Source

pub fn from_envelope(env: &EventEnvelope, workflow_id: WorkflowId) -> Self

Build a context that is causally linked to a prior persisted event.

Propagates correlation_id, conversation_id, process_id, and tenant_id from the envelope and sets the envelope’s event_id as the causation_id. This is the canonical constructor for all commands that are triggered by a prior event (e.g. dispatching an APERAK in response to a received UTILMD).

§Example
let ctx = CommandContext::from_envelope(&utilmd_envelope, workflow_id);
process.execute_with(DispatchAperak { positive: true, reason: None }, ctx).await?;
Source

pub fn from_deadline(deadline: &Deadline, workflow_id: WorkflowId) -> Self

Build a context for a deadline-triggered command.

Propagates process_id and tenant_id from the deadline. Generates fresh correlation_id and conversation_id (deadline firings start a new tracing root).

§Example
let ctx = CommandContext::from_deadline(&overdue_deadline, workflow_id);
process.execute_with(HandleTimeout { label: overdue_deadline.label().into() }, ctx).await?;
Source

pub fn new_event<E: EventPayload>( &self, event: &E, ) -> Result<NewEvent, EngineError>

Build a NewEvent from this context and a domain event payload.

This is the canonical way to construct a NewEvent inside a transport adapter or test helper — it eliminates the nine-argument NewEvent::new call and ensures that correlation metadata is always propagated correctly.

§Errors

Returns EngineError::Serialization when the event payload cannot be serialized to JSON.

§Example
// Inside a MessageAdapter or test:
let new_event = ctx.new_event(&SupplierChangeEvent::Activated)?;
store.append(&stream_id, ExpectedVersion::Any, &[new_event]).await?;

Trait Implementations§

Source§

impl Clone for CommandContext

Source§

fn clone(&self) -> CommandContext

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 CommandContext

Source§

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

Formats the value using the given formatter. Read more

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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 = Infallible

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.
Source§

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

Source§

fn vzip(self) -> V

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