swf_core/models/task/
try_task.rs1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4use super::{Map, TaskDefinition, TaskDefinitionFields};
5use crate::models::retry::OneOfRetryPolicyDefinitionOrReference;
6
7fn default_catch_as() -> Option<String> {
8 Some("error".to_string())
9}
10
11#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
13pub struct TryTaskDefinition {
14 #[serde(rename = "try")]
16 pub try_: Map<String, TaskDefinition>,
17
18 #[serde(rename = "catch")]
20 pub catch: ErrorCatcherDefinition,
21
22 #[serde(flatten)]
24 pub common: TaskDefinitionFields,
25}
26impl TryTaskDefinition {
27 pub fn new(try_: Map<String, TaskDefinition>, catch: ErrorCatcherDefinition) -> Self {
29 Self {
30 try_,
31 catch,
32 common: TaskDefinitionFields::new(),
33 }
34 }
35}
36
37#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
39pub struct ErrorCatcherDefinition {
40 #[serde(rename = "errors", skip_serializing_if = "Option::is_none")]
42 pub errors: Option<ErrorFilterDefinition>,
43
44 #[serde(
46 rename = "as",
47 default = "default_catch_as",
48 skip_serializing_if = "Option::is_none"
49 )]
50 pub as_: Option<String>,
51
52 #[serde(rename = "when", skip_serializing_if = "Option::is_none")]
54 pub when: Option<String>,
55
56 #[serde(rename = "exceptWhen", skip_serializing_if = "Option::is_none")]
58 pub except_when: Option<String>,
59
60 #[serde(rename = "retry", skip_serializing_if = "Option::is_none")]
62 pub retry: Option<OneOfRetryPolicyDefinitionOrReference>,
63
64 #[serde(rename = "do", skip_serializing_if = "Option::is_none")]
66 pub do_: Option<Map<String, TaskDefinition>>,
67}
68
69#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
71pub struct ErrorFilterDefinition {
72 #[serde(rename = "with", skip_serializing_if = "Option::is_none")]
74 pub with: Option<ErrorFilterProperties>,
75}
76
77#[derive(Debug, Default, Clone, PartialEq, Serialize, Deserialize)]
79pub struct ErrorFilterProperties {
80 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
82 pub type_: Option<String>,
83
84 #[serde(rename = "status", skip_serializing_if = "Option::is_none")]
86 pub status: Option<Value>,
87
88 #[serde(rename = "instance", skip_serializing_if = "Option::is_none")]
90 pub instance: Option<String>,
91
92 #[serde(rename = "title", skip_serializing_if = "Option::is_none")]
94 pub title: Option<String>,
95
96 #[serde(rename = "detail", skip_serializing_if = "Option::is_none")]
98 pub detail: Option<String>,
99}