1use crate::traits::{
2 BroadcasterBuilder, EstimatorBuilder, ExecutorBuilder, HealthMonitorBuilder, MarketBuilder, MergerBuilder, MonitoringBuilder,
3 NetworkBuilder, PoolBuilder, SignerBuilder, StrategyBuilder, WebServerBuilder,
4};
5
6pub trait KabuNodeTypes: Clone + Send + Sync + 'static {
8 type State: Clone + Send + Sync + 'static;
10}
11
12pub trait KabuNode<N: KabuNodeTypes>: KabuNodeTypes + Clone {
14 type ComponentsBuilder: KabuNodeComponentsBuilder<N>;
16
17 fn components_builder(&self) -> Self::ComponentsBuilder;
19}
20
21pub trait KabuNodeComponentsBuilder<N: KabuNodeTypes>: Clone + Send + Sync + 'static {
23 type Pool: PoolBuilder<N::State>;
25 type Network: NetworkBuilder<N::State>;
27 type Executor: ExecutorBuilder<N::State>;
29 type Strategy: StrategyBuilder<N::State>;
31 type Signer: SignerBuilder<N::State>;
33 type Market: MarketBuilder<N::State>;
35 type Broadcaster: BroadcasterBuilder<N::State>;
37 type Estimator: EstimatorBuilder<N::State>;
39 type HealthMonitor: HealthMonitorBuilder<N::State>;
41 type Merger: MergerBuilder<N::State>;
43 type WebServer: WebServerBuilder<N::State>;
45 type Monitoring: MonitoringBuilder<N::State>;
47
48 fn build_components(self) -> KabuComponentsSet<N::State, Self, N>;
50}
51
52pub trait WithKabuNode<B> {
54 fn node<N>(self, node: N) -> B
56 where
57 N: KabuNode<N> + KabuNodeTypes;
58}
59
60pub struct KabuComponentsSet<State, Builder, N>
62where
63 N: KabuNodeTypes<State = State>,
64 Builder: KabuNodeComponentsBuilder<N>,
65{
66 pub pool: Builder::Pool,
67 pub network: Builder::Network,
68 pub executor: Builder::Executor,
69 pub strategy: Builder::Strategy,
70 pub signer: Builder::Signer,
71 pub market: Builder::Market,
72 pub broadcaster: Builder::Broadcaster,
73 pub estimator: Builder::Estimator,
74 pub health_monitor: Builder::HealthMonitor,
75 pub merger: Builder::Merger,
76 pub web_server: Builder::WebServer,
77 pub monitoring: Builder::Monitoring,
78 pub _phantom: std::marker::PhantomData<N>,
79}
80
81#[derive(Clone)]
83pub struct DefaultKabuNodeComponentsBuilder<
84 Pool,
85 Network,
86 Executor,
87 Strategy,
88 Signer,
89 Market,
90 Broadcaster,
91 Estimator,
92 HealthMonitor,
93 Merger,
94 WebServer,
95 Monitoring,
96> {
97 pool: Pool,
98 network: Network,
99 executor: Executor,
100 strategy: Strategy,
101 signer: Signer,
102 market: Market,
103 broadcaster: Broadcaster,
104 estimator: Estimator,
105 health_monitor: HealthMonitor,
106 merger: Merger,
107 web_server: WebServer,
108 monitoring: Monitoring,
109}
110
111impl<Pool, Network, Executor, Strategy, Signer, Market, Broadcaster, Estimator, HealthMonitor, Merger, WebServer, Monitoring, N>
112 KabuNodeComponentsBuilder<N>
113 for DefaultKabuNodeComponentsBuilder<
114 Pool,
115 Network,
116 Executor,
117 Strategy,
118 Signer,
119 Market,
120 Broadcaster,
121 Estimator,
122 HealthMonitor,
123 Merger,
124 WebServer,
125 Monitoring,
126 >
127where
128 N: KabuNodeTypes,
129 Pool: PoolBuilder<N::State> + Clone + Send + Sync + 'static,
130 Network: NetworkBuilder<N::State> + Clone + Send + Sync + 'static,
131 Executor: ExecutorBuilder<N::State> + Clone + Send + Sync + 'static,
132 Strategy: StrategyBuilder<N::State> + Clone + Send + Sync + 'static,
133 Signer: SignerBuilder<N::State> + Clone + Send + Sync + 'static,
134 Market: MarketBuilder<N::State> + Clone + Send + Sync + 'static,
135 Broadcaster: BroadcasterBuilder<N::State> + Clone + Send + Sync + 'static,
136 Estimator: EstimatorBuilder<N::State> + Clone + Send + Sync + 'static,
137 HealthMonitor: HealthMonitorBuilder<N::State> + Clone + Send + Sync + 'static,
138 Merger: MergerBuilder<N::State> + Clone + Send + Sync + 'static,
139 WebServer: WebServerBuilder<N::State> + Clone + Send + Sync + 'static,
140 Monitoring: MonitoringBuilder<N::State> + Clone + Send + Sync + 'static,
141{
142 type Pool = Pool;
143 type Network = Network;
144 type Executor = Executor;
145 type Strategy = Strategy;
146 type Signer = Signer;
147 type Market = Market;
148 type Broadcaster = Broadcaster;
149 type Estimator = Estimator;
150 type HealthMonitor = HealthMonitor;
151 type Merger = Merger;
152 type WebServer = WebServer;
153 type Monitoring = Monitoring;
154
155 fn build_components(self) -> KabuComponentsSet<N::State, Self, N> {
156 KabuComponentsSet {
157 pool: self.pool,
158 network: self.network,
159 executor: self.executor,
160 strategy: self.strategy,
161 signer: self.signer,
162 market: self.market,
163 broadcaster: self.broadcaster,
164 estimator: self.estimator,
165 health_monitor: self.health_monitor,
166 merger: self.merger,
167 web_server: self.web_server,
168 monitoring: self.monitoring,
169 _phantom: std::marker::PhantomData,
170 }
171 }
172}