Skip to main content

temporalio_common_wasm/
worker.rs

1//! WASM-safe worker-related shared types exposed through workflow APIs.
2
3use crate::protos::{coresdk, temporal};
4use std::str::FromStr;
5
6/// Identifies a specific version of a worker deployment.
7#[derive(Clone, Debug, Eq, PartialEq, Hash, bon::Builder)]
8#[builder(on(String, into), state_mod(vis = "pub"))]
9#[non_exhaustive]
10pub struct WorkerDeploymentVersion {
11    /// Name of the deployment
12    pub deployment_name: String,
13    /// Build ID for the worker.
14    pub build_id: String,
15}
16
17impl WorkerDeploymentVersion {
18    /// Returns true if both the deployment name and build ID are empty.
19    pub fn is_empty(&self) -> bool {
20        self.deployment_name.is_empty() && self.build_id.is_empty()
21    }
22}
23
24impl FromStr for WorkerDeploymentVersion {
25    type Err = ();
26
27    fn from_str(s: &str) -> Result<Self, Self::Err> {
28        match s.split_once('.') {
29            Some((name, build_id)) => Ok(WorkerDeploymentVersion {
30                deployment_name: name.to_owned(),
31                build_id: build_id.to_owned(),
32            }),
33            _ => Err(()),
34        }
35    }
36}
37
38impl From<WorkerDeploymentVersion> for coresdk::common::WorkerDeploymentVersion {
39    fn from(v: WorkerDeploymentVersion) -> coresdk::common::WorkerDeploymentVersion {
40        coresdk::common::WorkerDeploymentVersion {
41            deployment_name: v.deployment_name,
42            build_id: v.build_id,
43        }
44    }
45}
46
47impl From<coresdk::common::WorkerDeploymentVersion> for WorkerDeploymentVersion {
48    fn from(v: coresdk::common::WorkerDeploymentVersion) -> WorkerDeploymentVersion {
49        WorkerDeploymentVersion {
50            deployment_name: v.deployment_name,
51            build_id: v.build_id,
52        }
53    }
54}
55
56impl From<temporal::api::deployment::v1::WorkerDeploymentVersion> for WorkerDeploymentVersion {
57    fn from(v: temporal::api::deployment::v1::WorkerDeploymentVersion) -> Self {
58        Self {
59            deployment_name: v.deployment_name,
60            build_id: v.build_id,
61        }
62    }
63}