swf_builders/services/task/
mod.rs1use serde_json::Value;
2use std::collections::HashMap;
3use swf_core::models::authentication::{
4 AuthenticationPolicyReference, ReferenceableAuthenticationPolicy,
5};
6use swf_core::models::call::CallTaskDefinition;
7use swf_core::models::call::{
8 A2AArguments, AsyncApiArguments, CallA2ADefinition, CallAsyncAPIDefinition,
9 CallFunctionDefinition, CallGRPCDefinition, CallHTTPDefinition, CallOpenAPIDefinition,
10 GRPCArguments, GRPCServiceDefinition, HTTPArguments, OneOfA2AParametersOrExpression,
11 OneOfHeadersOrExpression, OneOfQueryOrExpression, OpenAPIArguments,
12};
13use swf_core::models::duration::*;
14use swf_core::models::error::ErrorType;
15use swf_core::models::error::*;
16use swf_core::models::event::*;
17use swf_core::models::input::*;
18use swf_core::models::output::*;
19use swf_core::models::resource::{ExternalResourceDefinition, OneOfEndpointDefinitionOrUri};
20use swf_core::models::retry::*;
21use swf_core::models::task::*;
22use swf_core::models::timeout::*;
23
24use super::timeout::TimeoutDefinitionBuilder;
25
26macro_rules! task_variant_method {
29 ($method:ident, $variant:ident, $builder:ident $(, $arg:ident: $arg_ty:ty)*) => {
30 pub fn $method(&mut self $(, $arg: $arg_ty)*) -> &mut $builder {
31 let builder = $builder::new($($arg),*);
32 self.builder = Some(TaskBuilderVariant::$variant(Box::new(builder)));
33 match &mut self.builder {
34 Some(TaskBuilderVariant::$variant(ref mut builder)) => builder,
35 _ => unreachable!(concat!("Builder should always be set to ", stringify!($variant))),
36 }
37 }
38 };
39}
40
41macro_rules! impl_task_definition_builder_base {
48 ($builder:ident, $field:ident, $build_expr:expr) => {
49 impl TaskDefinitionBuilderBase for $builder {
50 fn if_(&mut self, condition: &str) -> &mut Self {
51 self.$field.common.if_ = Some(condition.to_string());
52 self
53 }
54
55 fn with_timeout_reference(&mut self, reference: &str) -> &mut Self {
56 self.$field.common.timeout = Some(OneOfTimeoutDefinitionOrReference::Reference(
57 reference.to_string(),
58 ));
59 self
60 }
61
62 fn with_timeout<F>(&mut self, setup: F) -> &mut Self
63 where
64 F: FnOnce(&mut TimeoutDefinitionBuilder),
65 {
66 let mut builder = TimeoutDefinitionBuilder::new();
67 setup(&mut builder);
68 let timeout = builder.build();
69 self.$field.common.timeout =
70 Some(OneOfTimeoutDefinitionOrReference::Timeout(timeout));
71 self
72 }
73
74 fn with_input<F>(&mut self, setup: F) -> &mut Self
75 where
76 F: FnOnce(&mut InputDataModelDefinitionBuilder),
77 {
78 let mut builder = InputDataModelDefinitionBuilder::new();
79 setup(&mut builder);
80 self.$field.common.input = Some(builder.build());
81 self
82 }
83
84 fn with_output<F>(&mut self, setup: F) -> &mut Self
85 where
86 F: FnOnce(&mut OutputDataModelDefinitionBuilder),
87 {
88 let mut builder = OutputDataModelDefinitionBuilder::new();
89 setup(&mut builder);
90 self.$field.common.output = Some(builder.build());
91 self
92 }
93
94 fn with_export<F>(&mut self, setup: F) -> &mut Self
95 where
96 F: FnOnce(&mut OutputDataModelDefinitionBuilder),
97 {
98 let mut builder = OutputDataModelDefinitionBuilder::new();
99 setup(&mut builder);
100 self.$field.common.export = Some(builder.build());
101 self
102 }
103
104 fn then(&mut self, directive: &str) -> &mut Self {
105 self.$field.common.then = Some(directive.to_string());
106 self
107 }
108
109 fn build(self) -> TaskDefinition {
110 $build_expr(self.$field)
111 }
112 }
113 };
114}
115
116mod call;
117mod common;
118mod do_task;
119mod emit;
120mod for_loop;
121mod fork;
122mod listen;
123mod raise;
124mod run;
125mod set;
126mod switch;
127mod task_builder;
128mod try_catch;
129mod wait;
130
131pub use call::*;
132pub use common::*;
133pub use do_task::*;
134pub use emit::*;
135pub use for_loop::*;
136pub use fork::*;
137pub use listen::*;
138pub use raise::*;
139pub use run::*;
140pub use set::*;
141pub use switch::*;
142pub use task_builder::*;
143pub use try_catch::*;
144pub use wait::*;