Skip to main content

WorkflowImplementation

Trait WorkflowImplementation 

Source
pub trait WorkflowImplementation: Sized + 'static {
    type Run: WorkflowDefinition;

    const HAS_INIT: bool;
    const INIT_TAKES_INPUT: bool;

    // Required methods
    fn name() -> &'static str;
    fn definition() -> WorkflowDefinitionDescriptor;
    fn init(
        ctx: WorkflowContextView,
        input: Option<<Self::Run as WorkflowDefinition>::Input>,
    ) -> Self;
    fn run(
        ctx: WorkflowContext<Self>,
        input: Option<<Self::Run as WorkflowDefinition>::Input>,
    ) -> Pin<Box<dyn Future<Output = Result<Payload, WorkflowTermination>>>>;
    fn dispatch_signal(
        ctx: WorkflowContext<Self>,
        name: &str,
        input: Box<dyn Any>,
    ) -> Pin<Box<dyn Future<Output = Result<(), WorkflowError>>>>;
    fn dispatch_query(
        &self,
        ctx: WorkflowContextView,
        name: &str,
        input: Box<dyn Any>,
        converter: &PayloadConverter,
    ) -> Result<Payload, WorkflowError>;
    fn dispatch_update(
        ctx: WorkflowContext<Self>,
        name: &str,
        input: Box<dyn Any>,
        converter: &PayloadConverter,
    ) -> Pin<Box<dyn Future<Output = Result<Payload, WorkflowError>>>>;
    fn validate_update(
        &self,
        ctx: WorkflowContextView,
        name: &str,
        input: Box<dyn Any>,
    ) -> Result<(), WorkflowError>;

    // Provided methods
    fn decode_signal_input(
        _name: &str,
        _payloads: Payloads,
        _converter: &PayloadConverter,
    ) -> Result<Option<Box<dyn Any>>, WorkflowError> { ... }
    fn decode_query_input(
        _name: &str,
        _payloads: &Payloads,
        _converter: &PayloadConverter,
    ) -> Result<Option<Box<dyn Any>>, WorkflowError> { ... }
    fn decode_update_input(
        _name: &str,
        _payloads: Payloads,
        _converter: &PayloadConverter,
    ) -> Result<Option<Box<dyn Any>>, WorkflowError> { ... }
}
Expand description

Trait implemented by workflow structs to enable execution by the worker.

This trait is typically generated by the #[workflow_methods] macro and should not be implemented manually in most cases.

Required Associated Constants§

Source

const HAS_INIT: bool

Whether this workflow has a user-defined #[init] method. Set to true by the macro when #[init] is present, false otherwise.

Source

const INIT_TAKES_INPUT: bool

Whether the init method accepts the workflow input. If true, input goes to init. If false, input goes to run.

Required Associated Types§

Source

type Run: WorkflowDefinition

The marker struct for the run method that implements WorkflowDefinition

Required Methods§

Source

fn name() -> &'static str

Returns the workflow type name.

Source

fn definition() -> WorkflowDefinitionDescriptor

Returns the exported workflow definition metadata for this workflow.

Source

fn init( ctx: WorkflowContextView, input: Option<<Self::Run as WorkflowDefinition>::Input>, ) -> Self

Initialize the workflow instance.

Source

fn run( ctx: WorkflowContext<Self>, input: Option<<Self::Run as WorkflowDefinition>::Input>, ) -> Pin<Box<dyn Future<Output = Result<Payload, WorkflowTermination>>>>

Execute the workflow’s main run function.

Source

fn dispatch_signal( ctx: WorkflowContext<Self>, name: &str, input: Box<dyn Any>, ) -> Pin<Box<dyn Future<Output = Result<(), WorkflowError>>>>

Dispatch a signal using an already decoded input value.

Source

fn dispatch_query( &self, ctx: WorkflowContextView, name: &str, input: Box<dyn Any>, converter: &PayloadConverter, ) -> Result<Payload, WorkflowError>

Dispatch a query using an already decoded input value.

Source

fn dispatch_update( ctx: WorkflowContext<Self>, name: &str, input: Box<dyn Any>, converter: &PayloadConverter, ) -> Pin<Box<dyn Future<Output = Result<Payload, WorkflowError>>>>

Dispatch an update using an already decoded input value.

Source

fn validate_update( &self, ctx: WorkflowContextView, name: &str, input: Box<dyn Any>, ) -> Result<(), WorkflowError>

Validate an update using an already decoded input value.

Provided Methods§

Source

fn decode_signal_input( _name: &str, _payloads: Payloads, _converter: &PayloadConverter, ) -> Result<Option<Box<dyn Any>>, WorkflowError>

Decode a signal’s payloads into that signal handler’s concrete input type.

Source

fn decode_query_input( _name: &str, _payloads: &Payloads, _converter: &PayloadConverter, ) -> Result<Option<Box<dyn Any>>, WorkflowError>

Decode a query’s payloads into that query handler’s concrete input type.

Source

fn decode_update_input( _name: &str, _payloads: Payloads, _converter: &PayloadConverter, ) -> Result<Option<Box<dyn Any>>, WorkflowError>

Decode an update’s payloads into that update handler’s concrete input type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§