use serde_derive::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use crate::models::authentication::*;
use crate::models::catalog::*;
use crate::models::duration::*;
use crate::models::error::*;
use crate::models::event::*;
use crate::models::extension::*;
use crate::models::input::*;
use crate::models::map::*;
use crate::models::output::*;
use crate::models::retry::*;
use crate::models::task::*;
use crate::models::timeout::*;
pub const DEFAULT_NAMESPACE: &str = "default";
fn default_namespace() -> String {
DEFAULT_NAMESPACE.to_string()
}
pub const LATEST_DSL_VERSION: &str = "1.0.0";
fn default_dsl_version() -> String {
LATEST_DSL_VERSION.to_string()
}
fn default_runtime_expression_language() -> String{
RuntimeExpressionLanguage::JQ.to_string()
}
pub struct RuntimeExpressionLanguage;
impl RuntimeExpressionLanguage {
pub const JQ: &'static str = "jq";
pub const JAVASCRIPT: &'static str = "js";
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct WorkflowDefinition{
#[serde(rename = "document")]
pub document: WorkflowDefinitionMetadata,
#[serde(rename = "input", skip_serializing_if = "Option::is_none")]
pub input: Option<InputDataModelDefinition>,
#[serde(rename = "use", skip_serializing_if = "Option::is_none")]
pub use_: Option<ComponentDefinitionCollection>,
#[serde(rename = "timeout", skip_serializing_if = "Option::is_none")]
pub timeout: Option<OneOfTimeoutDefinitionOrReference>,
#[serde(rename = "output", skip_serializing_if = "Option::is_none")]
pub output: Option<OutputDataModelDefinition>,
#[serde(rename = "schedule", skip_serializing_if = "Option::is_none")]
pub schedule: Option<WorkflowScheduleDefinition>,
#[serde(rename = "evaluate", skip_serializing_if = "Option::is_none")]
pub evaluate: Option<RuntimeExpressionEvaluationConfiguration>,
#[serde(rename = "do")]
pub do_: Map<String, TaskDefinition>,
#[serde(rename = "metadata", skip_serializing_if = "Option::is_none")]
pub metadata: Option<HashMap<String, Value>>
}
impl WorkflowDefinition {
pub fn new(document: WorkflowDefinitionMetadata) -> Self {
Self {
document,
input: None,
use_: None,
timeout: None,
output: None,
schedule: None,
evaluate: None,
do_: Map::new(),
metadata: None
}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct WorkflowDefinitionMetadata {
#[serde(rename = "dsl")]
pub dsl: String,
#[serde(rename = "namespace", default = "default_namespace")]
pub namespace: String,
#[serde(rename = "name")]
pub name: String,
#[serde(rename = "version")]
pub version: String,
#[serde(rename = "title", skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(rename = "summary", skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
#[serde(rename = "tags", skip_serializing_if = "Option::is_none")]
pub tags: Option<HashMap<String, String>>
}
impl WorkflowDefinitionMetadata{
pub fn new(namespace : &str, name: &str, version : &str, title: Option<String>, summary : Option<String>, tags: Option<HashMap<String, String>>) -> Self {
Self {
dsl: default_dsl_version(),
namespace: namespace.to_owned(),
name: name.to_owned(),
version: version.to_owned(),
title,
summary,
tags
}
}
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct WorkflowScheduleDefinition{
#[serde(rename = "every", skip_serializing_if = "Option::is_none")]
pub every: Option<Duration>,
#[serde(rename = "cron", skip_serializing_if = "Option::is_none")]
pub cron: Option<String>,
#[serde(rename = "after", skip_serializing_if = "Option::is_none")]
pub after: Option<Duration>,
#[serde(rename = "on", skip_serializing_if = "Option::is_none")]
pub on: Option<EventConsumptionStrategyDefinition>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct RuntimeExpressionEvaluationConfiguration{
#[serde(rename = "language", default = "default_runtime_expression_language")]
pub language: String,
#[serde(rename = "mode", skip_serializing_if = "Option::is_none")]
pub mode: Option<String>
}
#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
pub struct ComponentDefinitionCollection{
#[serde(rename = "authentications", skip_serializing_if = "Option::is_none")]
pub authentications: Option<HashMap<String, AuthenticationPolicyDefinition>>,
#[serde(rename = "catalogs", skip_serializing_if = "Option::is_none")]
pub catalogs: Option<HashMap<String, CatalogDefinition>>,
#[serde(rename = "errors", skip_serializing_if = "Option::is_none")]
pub errors: Option<HashMap<String, ErrorDefinition>>,
#[serde(rename = "extensions", skip_serializing_if = "Option::is_none")]
pub extensions: Option<HashMap<String, ExtensionDefinition>>,
#[serde(rename = "functions", skip_serializing_if = "Option::is_none")]
pub functions: Option<HashMap<String, TaskDefinition>>,
#[serde(rename = "retries", skip_serializing_if = "Option::is_none")]
pub retries: Option<HashMap<String, RetryPolicyDefinition>>,
#[serde(rename = "secrets", skip_serializing_if = "Option::is_none")]
pub secrets: Option<Vec<String>>,
#[serde(rename = "timeouts", skip_serializing_if = "Option::is_none")]
pub timeouts: Option<HashMap<String, TimeoutDefinition>>,
}