Skip to main content

DeterministicExecutor

Struct DeterministicExecutor 

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

Handles deterministic operations for workflow execution.

Mirrors pynenc’s DeterministicExecutor. Ensures that operations like random number generation, time functions, and UUIDs behave deterministically across workflow replays by using deterministic seeds and storing results in the state backend.

Implementations§

Source§

impl DeterministicExecutor

Source

pub fn new( workflow_id: InvocationId, state_backend: Arc<dyn StateBackend>, ) -> Self

Create a new deterministic executor for a workflow.

Source

pub fn get_next_sequence(&mut self, operation: &str) -> u64

Get the next sequence number for an operation type.

Source

pub fn get_operation_count(&self, operation: &str) -> u64

Get the current count for an operation type.

Source

pub async fn deterministic_operation<F>( &mut self, operation: &str, generator: F, ) -> RustvelloResult<String>
where F: FnOnce() -> String,

Execute an operation with deterministic results.

Checks if a value exists for this operation+sequence in the state backend. If found, returns the stored value (replay mode). Otherwise, generates a new value using the provided generator and stores it.

Source

pub async fn get_base_time(&self) -> RustvelloResult<DateTime<Utc>>

Get or establish the workflow base time for deterministic timestamps.

Source

pub async fn random(&mut self) -> RustvelloResult<f64>

Generate a deterministic random number (0.0..1.0) using workflow-specific seed.

Source

pub async fn utc_now(&mut self) -> RustvelloResult<DateTime<Utc>>

Get current time deterministically by advancing from base time.

Source

pub async fn uuid(&mut self) -> RustvelloResult<String>

Generate a deterministic UUID using workflow-specific seed.

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

Source§

type Output = T

Should always be Self
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<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