1use serde::{Deserialize, Serialize};
2use std::collections::BTreeMap;
3
4#[cfg(feature = "ts-bindings")]
5use ts_rs::TS;
6
7use crate::{Component, ServiceManager, ServiceStatus, SignatureKind, Submit, Trigger, WorkflowId};
8
9#[cfg_attr(feature = "ts-bindings", derive(TS))]
11#[cfg_attr(feature = "ts-bindings", ts(export))]
12#[derive(Serialize, Deserialize, Clone, Debug)]
13#[serde(rename_all = "snake_case")]
14pub struct ServiceBuilder {
15 pub name: String,
16 pub workflows: BTreeMap<WorkflowId, WorkflowBuilder>,
17 pub status: ServiceStatus,
18 pub manager: ServiceManagerBuilder,
19}
20
21#[cfg_attr(feature = "ts-bindings", derive(TS))]
22#[cfg_attr(feature = "ts-bindings", ts(export))]
23#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
24#[serde(rename_all = "snake_case")]
25pub struct WorkflowBuilder {
26 pub trigger: TriggerBuilder,
27 pub component: ComponentBuilder,
28 pub submit: SubmitBuilder,
29}
30
31#[cfg_attr(feature = "ts-bindings", derive(TS))]
32#[cfg_attr(feature = "ts-bindings", ts(export))]
33#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
34#[serde(rename_all = "snake_case", untagged)]
35pub enum TriggerBuilder {
36 Trigger(Trigger),
37 Builder(Builder),
38}
39
40impl Default for TriggerBuilder {
41 fn default() -> Self {
42 TriggerBuilder::Builder(Builder::Unset)
43 }
44}
45
46#[cfg_attr(feature = "ts-bindings", derive(TS))]
47#[cfg_attr(feature = "ts-bindings", ts(export))]
48#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
49#[serde(rename_all = "snake_case", untagged)]
50#[allow(clippy::large_enum_variant)]
51pub enum SubmitBuilder {
52 Submit(Submit),
53 Builder(Builder),
54 AggregatorBuilder(AggregatorBuilder),
55}
56
57#[cfg_attr(feature = "ts-bindings", derive(TS))]
58#[cfg_attr(feature = "ts-bindings", ts(export))]
59#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
60#[serde(rename_all = "snake_case")]
61pub enum AggregatorBuilder {
62 Aggregator {
63 component: ComponentBuilder,
64 signature_kind: SignatureKind,
65 },
66}
67
68impl Default for SubmitBuilder {
69 fn default() -> Self {
70 SubmitBuilder::Builder(Builder::Unset)
71 }
72}
73
74#[cfg_attr(feature = "ts-bindings", derive(TS))]
75#[cfg_attr(feature = "ts-bindings", ts(export))]
76#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
77#[serde(rename_all = "snake_case", untagged)]
78pub enum ServiceManagerBuilder {
79 Manager(ServiceManager),
80 Builder(Builder),
81}
82
83impl Default for ServiceManagerBuilder {
84 fn default() -> Self {
85 ServiceManagerBuilder::Builder(Builder::Unset)
86 }
87}
88
89#[cfg_attr(feature = "ts-bindings", derive(TS))]
90#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
91#[serde(rename_all = "snake_case")]
92pub enum Builder {
93 Unset,
94}
95
96#[cfg_attr(feature = "ts-bindings", derive(TS))]
97#[cfg_attr(feature = "ts-bindings", ts(export))]
98#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
99#[serde(rename_all = "snake_case", untagged)]
100#[allow(clippy::large_enum_variant)]
101pub enum ComponentBuilder {
102 Component(Component),
103 Builder(Builder),
104}
105
106impl ComponentBuilder {
107 pub fn new(component: Component) -> Self {
108 ComponentBuilder::Component(component)
109 }
110
111 pub fn new_unset() -> Self {
112 ComponentBuilder::Builder(Builder::Unset)
113 }
114
115 pub fn is_unset(&self) -> bool {
116 matches!(self, ComponentBuilder::Builder(Builder::Unset))
117 }
118
119 pub fn is_set(&self) -> bool {
120 matches!(self, ComponentBuilder::Component(_))
121 }
122
123 pub fn as_component(&self) -> Option<&Component> {
124 match self {
125 ComponentBuilder::Component(component) => Some(component),
126 ComponentBuilder::Builder(Builder::Unset) => None,
127 }
128 }
129
130 pub fn as_component_mut(&mut self) -> Option<&mut Component> {
131 match self {
132 ComponentBuilder::Component(component) => Some(component),
133 ComponentBuilder::Builder(Builder::Unset) => None,
134 }
135 }
136}
137
138impl Default for ComponentBuilder {
139 fn default() -> Self {
140 ComponentBuilder::Builder(Builder::Unset)
141 }
142}