a3s_flow/workflow_dsl/
version.rs1use semver::Version;
2
3use super::{WorkflowDslError, TESTED_WORKFLOW_DSL_VERSION};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8#[non_exhaustive]
9pub enum WorkflowDslCompatibility {
10 Compatible,
12 CompatibleWithWarnings,
14 RequiresConfirmation,
16}
17
18pub(super) fn classify_dsl_version(
19 imported: &str,
20) -> Result<WorkflowDslCompatibility, WorkflowDslError> {
21 let current = Version::parse(TESTED_WORKFLOW_DSL_VERSION).map_err(|error| {
22 WorkflowDslError::InvalidDocument {
23 message: format!(
24 "A3S Flow tested workflow DSL version {TESTED_WORKFLOW_DSL_VERSION:?} is invalid: {error}"
25 ),
26 }
27 })?;
28 let imported = Version::parse(imported).map_err(|error| WorkflowDslError::InvalidDocument {
29 message: format!("workflow DSL version {imported:?} is invalid: {error}"),
30 })?;
31
32 if imported > current || imported.major < current.major {
33 return Ok(WorkflowDslCompatibility::RequiresConfirmation);
34 }
35 if imported.minor < current.minor {
36 return Ok(WorkflowDslCompatibility::CompatibleWithWarnings);
37 }
38 Ok(WorkflowDslCompatibility::Compatible)
39}