temporalio-sdk-core 0.7.0

Library for building new Temporal SDKs
Documentation
use crate::common::activity_functions::StdActivities;
use std::time::Duration;
use temporalio_common::protos::temporal::api::common::v1::RetryPolicy;
use temporalio_macros::{workflow, workflow_methods};
use temporalio_sdk::{ActivityOptions, LocalActivityOptions, WorkflowContext, WorkflowResult};
use temporalio_sdk_core::prost_dur;

#[workflow]
#[derive(Default)]
pub(crate) struct LaProblemWorkflow;

#[workflow_methods]
impl LaProblemWorkflow {
    #[run(name = "evict_while_la_running_no_interference")]
    pub(crate) async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
        ctx.execute_local_activity(
            StdActivities::delay,
            Duration::from_secs(15),
            LocalActivityOptions::builder()
                .retry_policy(
                    RetryPolicy {
                        initial_interval: Some(prost_dur!(from_micros(15))),
                        backoff_coefficient: 1_000.,
                        maximum_interval: Some(prost_dur!(from_millis(1500))),
                        maximum_attempts: 4,
                        non_retryable_error_types: vec![],
                    }
                    .into(),
                )
                .timer_backoff_threshold(Duration::from_secs(1))
                .build(),
        )
        .await?;
        ctx.execute_activity(
            StdActivities::delay,
            Duration::from_secs(15),
            ActivityOptions::start_to_close_timeout(Duration::from_secs(20)),
        )
        .await?;
        Ok(())
    }
}