swf_builders/services/task/
raise.rs1use super::*;
2
3pub struct RaiseErrorDefinitionBuilder {
6 error: ErrorDefinition,
7}
8
9impl RaiseErrorDefinitionBuilder {
10 pub fn new() -> Self {
11 Self {
12 error: ErrorDefinition::default(),
13 }
14 }
15
16 pub fn with_type(&mut self, type_: &str) -> &mut Self {
18 self.error.type_ = ErrorType::uri_template(type_);
19 self
20 }
21
22 pub fn with_status(&mut self, status: Value) -> &mut Self {
24 self.error.status = status;
25 self
26 }
27
28 pub fn with_title(&mut self, title: &str) -> &mut Self {
30 self.error.title = Some(title.to_string());
31 self
32 }
33
34 pub fn with_detail(&mut self, detail: &str) -> &mut Self {
36 self.error.detail = Some(detail.to_string());
37 self
38 }
39
40 pub fn with_instance(&mut self, instance: &str) -> &mut Self {
42 self.error.instance = Some(instance.to_string());
43 self
44 }
45
46 pub fn build(self) -> OneOfErrorDefinitionOrReference {
48 OneOfErrorDefinitionOrReference::Error(self.error)
49 }
50}
51
52impl Default for RaiseErrorDefinitionBuilder {
53 fn default() -> Self {
54 Self::new()
55 }
56}
57
58#[derive(Default)]
61pub struct RaiseTaskDefinitionBuilder {
62 task: RaiseTaskDefinition,
63 error_builder: Option<RaiseErrorDefinitionBuilder>,
64}
65
66impl RaiseTaskDefinitionBuilder {
67 pub fn new() -> Self {
68 Self::default()
69 }
70
71 pub fn error(&mut self) -> &mut RaiseErrorDefinitionBuilder {
73 self.error_builder = Some(RaiseErrorDefinitionBuilder::new());
74 self.get_error_builder()
75 }
76
77 pub fn error_reference(&mut self, ref_name: &str) -> &mut Self {
79 self.task.raise.error = OneOfErrorDefinitionOrReference::Reference(ref_name.to_string());
80 self.error_builder = None;
81 self
82 }
83
84 fn get_error_builder(&mut self) -> &mut RaiseErrorDefinitionBuilder {
85 if let Some(ref mut builder) = self.error_builder {
86 builder
87 } else {
88 unreachable!("Error builder should be set")
89 }
90 }
91}
92
93impl TaskDefinitionBuilderBase for RaiseTaskDefinitionBuilder {
94 fn if_(&mut self, condition: &str) -> &mut Self {
95 self.task.common.if_ = Some(condition.to_string());
96 self
97 }
98
99 fn with_timeout_reference(&mut self, reference: &str) -> &mut Self {
100 self.task.common.timeout = Some(OneOfTimeoutDefinitionOrReference::Reference(
101 reference.to_string(),
102 ));
103 self
104 }
105
106 fn with_timeout<F>(&mut self, setup: F) -> &mut Self
107 where
108 F: FnOnce(&mut TimeoutDefinitionBuilder),
109 {
110 let mut builder = TimeoutDefinitionBuilder::new();
111 setup(&mut builder);
112 let timeout = builder.build();
113 self.task.common.timeout = Some(OneOfTimeoutDefinitionOrReference::Timeout(timeout));
114 self
115 }
116
117 fn with_input<F>(&mut self, setup: F) -> &mut Self
118 where
119 F: FnOnce(&mut InputDataModelDefinitionBuilder),
120 {
121 let mut builder = InputDataModelDefinitionBuilder::new();
122 setup(&mut builder);
123 self.task.common.input = Some(builder.build());
124 self
125 }
126
127 fn with_output<F>(&mut self, setup: F) -> &mut Self
128 where
129 F: FnOnce(&mut OutputDataModelDefinitionBuilder),
130 {
131 let mut builder = OutputDataModelDefinitionBuilder::new();
132 setup(&mut builder);
133 self.task.common.output = Some(builder.build());
134 self
135 }
136
137 fn with_export<F>(&mut self, setup: F) -> &mut Self
138 where
139 F: FnOnce(&mut OutputDataModelDefinitionBuilder),
140 {
141 let mut builder = OutputDataModelDefinitionBuilder::new();
142 setup(&mut builder);
143 self.task.common.export = Some(builder.build());
144 self
145 }
146
147 fn then(&mut self, directive: &str) -> &mut Self {
148 self.task.common.then = Some(directive.to_string());
149 self
150 }
151
152 fn build(mut self) -> TaskDefinition {
153 if let Some(error_builder) = self.error_builder.take() {
154 self.task.raise.error = error_builder.build();
155 }
156 TaskDefinition::Raise(self.task)
157 }
158}