temporalio-sdk-core 0.4.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.start_local_activity(
            StdActivities::delay,
            Duration::from_secs(15),
            LocalActivityOptions {
                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![],
                },
                timer_backoff_threshold: Some(Duration::from_secs(1)),
                ..Default::default()
            },
        )
        .await
        .map_err(|e| anyhow::anyhow!("{e}"))?;
        ctx.start_activity(
            StdActivities::delay,
            Duration::from_secs(15),
            ActivityOptions::start_to_close_timeout(Duration::from_secs(20)),
        )
        .await
        .map_err(|e| anyhow::anyhow!("{e}"))?;
        Ok(())
    }
}