use crate::{
WorkerDeploymentVersion,
protos::temporal::api::{
deployment::v1::WorkerDeploymentVersion as ProtoWorkerDeploymentVersion,
workflow::v1::{VersioningOverride as ProtoVersioningOverride, versioning_override},
},
};
#[derive(Debug, Clone, PartialEq, Eq)]
#[non_exhaustive]
pub enum VersioningOverride {
Pinned(WorkerDeploymentVersion),
AutoUpgrade,
OneTime(WorkerDeploymentVersion),
}
impl From<VersioningOverride> for ProtoVersioningOverride {
fn from(value: VersioningOverride) -> Self {
let version = |value: WorkerDeploymentVersion| ProtoWorkerDeploymentVersion {
deployment_name: value.deployment_name,
build_id: value.build_id,
};
match value {
VersioningOverride::Pinned(value) => Self {
r#override: Some(versioning_override::Override::Pinned(
versioning_override::PinnedOverride {
behavior: versioning_override::PinnedOverrideBehavior::Pinned as i32,
version: Some(version(value)),
},
)),
..Default::default()
},
VersioningOverride::AutoUpgrade => Self {
r#override: Some(versioning_override::Override::AutoUpgrade(true)),
..Default::default()
},
VersioningOverride::OneTime(value) => Self {
r#override: Some(versioning_override::Override::OneTime(
versioning_override::OneTimeOverride {
target_deployment_version: Some(version(value)),
},
)),
..Default::default()
},
}
}
}