Skip to main content

temporalio_common_wasm/
versioning_override.rs

1use crate::{
2    WorkerDeploymentVersion,
3    protos::temporal::api::{
4        deployment::v1::WorkerDeploymentVersion as ProtoWorkerDeploymentVersion,
5        workflow::v1::{VersioningOverride as ProtoVersioningOverride, versioning_override},
6    },
7};
8
9/// Overrides a workflow's worker deployment routing.
10///
11/// **Experimental:** Pinned and auto-upgrade overrides for client-started workflows require
12/// Temporal Server 1.28.0 or later. Child workflow overrides require Temporal Server 1.32.0 or later.
13#[derive(Debug, Clone, PartialEq, Eq)]
14#[non_exhaustive]
15pub enum VersioningOverride {
16    /// Keep routing the workflow to this deployment version until the override is removed.
17    Pinned(WorkerDeploymentVersion),
18    /// Route the workflow using the task queue's current deployment version.
19    AutoUpgrade,
20    /// Route to this version until one workflow task completes there, then use the
21    /// versioning behavior and deployment version reported by that worker.
22    ///
23    /// Requires Temporal Server 1.32.0 or later.
24    OneTime(WorkerDeploymentVersion),
25}
26
27impl From<VersioningOverride> for ProtoVersioningOverride {
28    fn from(value: VersioningOverride) -> Self {
29        let version = |value: WorkerDeploymentVersion| ProtoWorkerDeploymentVersion {
30            deployment_name: value.deployment_name,
31            build_id: value.build_id,
32        };
33        match value {
34            VersioningOverride::Pinned(value) => Self {
35                r#override: Some(versioning_override::Override::Pinned(
36                    versioning_override::PinnedOverride {
37                        behavior: versioning_override::PinnedOverrideBehavior::Pinned as i32,
38                        version: Some(version(value)),
39                    },
40                )),
41                ..Default::default()
42            },
43            VersioningOverride::AutoUpgrade => Self {
44                r#override: Some(versioning_override::Override::AutoUpgrade(true)),
45                ..Default::default()
46            },
47            VersioningOverride::OneTime(value) => Self {
48                r#override: Some(versioning_override::Override::OneTime(
49                    versioning_override::OneTimeOverride {
50                        target_deployment_version: Some(version(value)),
51                    },
52                )),
53                ..Default::default()
54            },
55        }
56    }
57}