1use crate::defaults::{
4 DefaultBroadcaster, DefaultEstimator, DefaultExecutor, DefaultHealthMonitor, DefaultMarket, DefaultMerger, DefaultMonitoring,
5 DefaultNetwork, DefaultSigner, DefaultStrategy,
6};
7use crate::traits::DisabledComponent;
8
9pub struct KabuEthereumNode;
11
12pub struct ComponentSet<N, E, S, M, B, Est, H, Mer, Mon, Sig> {
14 pub network: N,
15 pub executor: E,
16 pub strategy: S,
17 pub market: M,
18 pub broadcaster: B,
19 pub estimator: Est,
20 pub health: H,
21 pub merger: Mer,
22 pub monitoring: Mon,
23 pub signer: Sig,
24}
25
26impl KabuEthereumNode {
27 pub fn components() -> ComponentSetBuilder<
29 DefaultNetwork,
30 DefaultExecutor,
31 DefaultStrategy,
32 DefaultMarket,
33 DefaultBroadcaster,
34 DefaultEstimator,
35 DefaultHealthMonitor,
36 DefaultMerger,
37 DefaultMonitoring,
38 DefaultSigner,
39 > {
40 ComponentSetBuilder {
41 network: DefaultNetwork,
42 executor: DefaultExecutor,
43 strategy: DefaultStrategy,
44 market: DefaultMarket,
45 broadcaster: DefaultBroadcaster,
46 estimator: DefaultEstimator,
47 health: DefaultHealthMonitor,
48 merger: DefaultMerger,
49 monitoring: DefaultMonitoring,
50 signer: DefaultSigner,
51 }
52 }
53}
54
55pub struct ComponentSetBuilder<N, E, S, M, B, Est, H, Mer, Mon, Sig> {
57 network: N,
58 executor: E,
59 strategy: S,
60 market: M,
61 broadcaster: B,
62 estimator: Est,
63 health: H,
64 merger: Mer,
65 monitoring: Mon,
66 signer: Sig,
67}
68
69impl Default
70 for ComponentSetBuilder<
71 DisabledComponent,
72 DisabledComponent,
73 DisabledComponent,
74 DisabledComponent,
75 DisabledComponent,
76 DisabledComponent,
77 DisabledComponent,
78 DisabledComponent,
79 DisabledComponent,
80 DisabledComponent,
81 >
82{
83 fn default() -> Self {
84 Self {
85 network: DisabledComponent,
86 executor: DisabledComponent,
87 strategy: DisabledComponent,
88 market: DisabledComponent,
89 broadcaster: DisabledComponent,
90 estimator: DisabledComponent,
91 health: DisabledComponent,
92 merger: DisabledComponent,
93 monitoring: DisabledComponent,
94 signer: DisabledComponent,
95 }
96 }
97}
98
99impl<N, E, S, M, B, Est, H, Mer, Mon, Sig> ComponentSetBuilder<N, E, S, M, B, Est, H, Mer, Mon, Sig> {
100 pub fn network<NewN>(self, network: NewN) -> ComponentSetBuilder<NewN, E, S, M, B, Est, H, Mer, Mon, Sig> {
102 ComponentSetBuilder {
103 network,
104 executor: self.executor,
105 strategy: self.strategy,
106 market: self.market,
107 broadcaster: self.broadcaster,
108 estimator: self.estimator,
109 health: self.health,
110 merger: self.merger,
111 monitoring: self.monitoring,
112 signer: self.signer,
113 }
114 }
115
116 pub fn executor<NewE>(self, executor: NewE) -> ComponentSetBuilder<N, NewE, S, M, B, Est, H, Mer, Mon, Sig> {
118 ComponentSetBuilder {
119 network: self.network,
120 executor,
121 strategy: self.strategy,
122 market: self.market,
123 broadcaster: self.broadcaster,
124 estimator: self.estimator,
125 health: self.health,
126 merger: self.merger,
127 monitoring: self.monitoring,
128 signer: self.signer,
129 }
130 }
131
132 pub fn strategy<NewS>(self, strategy: NewS) -> ComponentSetBuilder<N, E, NewS, M, B, Est, H, Mer, Mon, Sig> {
134 ComponentSetBuilder {
135 network: self.network,
136 executor: self.executor,
137 strategy,
138 market: self.market,
139 broadcaster: self.broadcaster,
140 estimator: self.estimator,
141 health: self.health,
142 merger: self.merger,
143 monitoring: self.monitoring,
144 signer: self.signer,
145 }
146 }
147
148 pub fn market<NewM>(self, market: NewM) -> ComponentSetBuilder<N, E, S, NewM, B, Est, H, Mer, Mon, Sig> {
150 ComponentSetBuilder {
151 network: self.network,
152 executor: self.executor,
153 strategy: self.strategy,
154 market,
155 broadcaster: self.broadcaster,
156 estimator: self.estimator,
157 health: self.health,
158 merger: self.merger,
159 monitoring: self.monitoring,
160 signer: self.signer,
161 }
162 }
163
164 pub fn broadcaster<NewB>(self, broadcaster: NewB) -> ComponentSetBuilder<N, E, S, M, NewB, Est, H, Mer, Mon, Sig> {
166 ComponentSetBuilder {
167 network: self.network,
168 executor: self.executor,
169 strategy: self.strategy,
170 market: self.market,
171 broadcaster,
172 estimator: self.estimator,
173 health: self.health,
174 merger: self.merger,
175 monitoring: self.monitoring,
176 signer: self.signer,
177 }
178 }
179
180 pub fn estimator<NewEst>(self, estimator: NewEst) -> ComponentSetBuilder<N, E, S, M, B, NewEst, H, Mer, Mon, Sig> {
182 ComponentSetBuilder {
183 network: self.network,
184 executor: self.executor,
185 strategy: self.strategy,
186 market: self.market,
187 broadcaster: self.broadcaster,
188 estimator,
189 health: self.health,
190 merger: self.merger,
191 monitoring: self.monitoring,
192 signer: self.signer,
193 }
194 }
195
196 pub fn health<NewH>(self, health: NewH) -> ComponentSetBuilder<N, E, S, M, B, Est, NewH, Mer, Mon, Sig> {
198 ComponentSetBuilder {
199 network: self.network,
200 executor: self.executor,
201 strategy: self.strategy,
202 market: self.market,
203 broadcaster: self.broadcaster,
204 estimator: self.estimator,
205 health,
206 merger: self.merger,
207 monitoring: self.monitoring,
208 signer: self.signer,
209 }
210 }
211
212 pub fn merger<NewMer>(self, merger: NewMer) -> ComponentSetBuilder<N, E, S, M, B, Est, H, NewMer, Mon, Sig> {
214 ComponentSetBuilder {
215 network: self.network,
216 executor: self.executor,
217 strategy: self.strategy,
218 market: self.market,
219 broadcaster: self.broadcaster,
220 estimator: self.estimator,
221 health: self.health,
222 merger,
223 monitoring: self.monitoring,
224 signer: self.signer,
225 }
226 }
227
228 pub fn monitoring<NewMon>(self, monitoring: NewMon) -> ComponentSetBuilder<N, E, S, M, B, Est, H, Mer, NewMon, Sig> {
230 ComponentSetBuilder {
231 network: self.network,
232 executor: self.executor,
233 strategy: self.strategy,
234 market: self.market,
235 broadcaster: self.broadcaster,
236 estimator: self.estimator,
237 health: self.health,
238 merger: self.merger,
239 monitoring,
240 signer: self.signer,
241 }
242 }
243
244 pub fn signer<NewSig>(self, signer: NewSig) -> ComponentSetBuilder<N, E, S, M, B, Est, H, Mer, Mon, NewSig> {
246 ComponentSetBuilder {
247 network: self.network,
248 executor: self.executor,
249 strategy: self.strategy,
250 market: self.market,
251 broadcaster: self.broadcaster,
252 estimator: self.estimator,
253 health: self.health,
254 merger: self.merger,
255 monitoring: self.monitoring,
256 signer,
257 }
258 }
259
260 pub fn build(self) -> ComponentSet<N, E, S, M, B, Est, H, Mer, Mon, Sig> {
262 ComponentSet {
263 network: self.network,
264 executor: self.executor,
265 strategy: self.strategy,
266 market: self.market,
267 broadcaster: self.broadcaster,
268 estimator: self.estimator,
269 health: self.health,
270 merger: self.merger,
271 monitoring: self.monitoring,
272 signer: self.signer,
273 }
274 }
275}