nautilus_data/defi/
client.rs1use nautilus_common::{
22 clients::log_command_error,
23 messages::defi::{
24 DefiRequestCommand, DefiSubscribeCommand, DefiUnsubscribeCommand, RequestPoolSnapshot,
25 SubscribeBlocks, SubscribePool, SubscribePoolFeeCollects, SubscribePoolFlashEvents,
26 SubscribePoolLiquidityUpdates, SubscribePoolSwaps, UnsubscribeBlocks, UnsubscribePool,
27 UnsubscribePoolFeeCollects, UnsubscribePoolFlashEvents, UnsubscribePoolLiquidityUpdates,
28 UnsubscribePoolSwaps,
29 },
30};
31
32use crate::client::DataClientAdapter;
33
34impl DataClientAdapter {
35 #[inline]
36 pub fn execute_defi_subscribe(&mut self, cmd: DefiSubscribeCommand) {
37 let cmd_debug = format!("{cmd:?}");
38 if let Err(e) = match cmd {
39 DefiSubscribeCommand::Blocks(cmd) => self.subscribe_blocks(cmd),
40 DefiSubscribeCommand::Pool(cmd) => self.subscribe_pool(cmd),
41 DefiSubscribeCommand::PoolSwaps(cmd) => self.subscribe_pool_swaps(cmd),
42 DefiSubscribeCommand::PoolLiquidityUpdates(cmd) => {
43 self.subscribe_pool_liquidity_updates(cmd)
44 }
45 DefiSubscribeCommand::PoolFeeCollects(cmd) => self.subscribe_pool_fee_collects(cmd),
46 DefiSubscribeCommand::PoolFlashEvents(cmd) => self.subscribe_pool_flash_events(cmd),
47 } {
48 log_command_error(&cmd_debug, &e);
49 }
50 }
51
52 #[inline]
53 pub fn execute_defi_unsubscribe(&mut self, cmd: &DefiUnsubscribeCommand) {
54 if let Err(e) = match cmd {
55 DefiUnsubscribeCommand::Blocks(cmd) => self.unsubscribe_blocks(cmd),
56 DefiUnsubscribeCommand::Pool(cmd) => self.unsubscribe_pool(cmd),
57 DefiUnsubscribeCommand::PoolSwaps(cmd) => self.unsubscribe_pool_swaps(cmd),
58 DefiUnsubscribeCommand::PoolLiquidityUpdates(cmd) => {
59 self.unsubscribe_pool_liquidity_updates(cmd)
60 }
61 DefiUnsubscribeCommand::PoolFeeCollects(cmd) => self.unsubscribe_pool_fee_collects(cmd),
62 DefiUnsubscribeCommand::PoolFlashEvents(cmd) => self.unsubscribe_pool_flash_events(cmd),
63 } {
64 log_command_error(&cmd, &e);
65 }
66 }
67
68 #[inline]
74 pub fn execute_defi_request(&self, cmd: DefiRequestCommand) -> anyhow::Result<()> {
75 match cmd {
76 DefiRequestCommand::PoolSnapshot(cmd) => self.request_pool_snapshot(cmd),
77 }
78 }
79
80 fn subscribe_blocks(&mut self, cmd: SubscribeBlocks) -> anyhow::Result<()> {
86 if Self::track_subscribe(&mut self.subscriptions_blocks, cmd.chain, "blocks") {
87 self.client.subscribe_blocks(cmd)?;
88 }
89 Ok(())
90 }
91
92 fn unsubscribe_blocks(&mut self, cmd: &UnsubscribeBlocks) -> anyhow::Result<()> {
98 if Self::track_unsubscribe(&mut self.subscriptions_blocks, cmd.chain, "blocks") {
99 self.client.unsubscribe_blocks(cmd)?;
100 }
101 Ok(())
102 }
103
104 fn subscribe_pool(&mut self, cmd: SubscribePool) -> anyhow::Result<()> {
110 if Self::track_subscribe(&mut self.subscriptions_pools, cmd.instrument_id, "pool") {
111 self.client.subscribe_pool(cmd)?;
112 }
113 Ok(())
114 }
115
116 fn subscribe_pool_swaps(&mut self, cmd: SubscribePoolSwaps) -> anyhow::Result<()> {
122 if Self::track_subscribe(
123 &mut self.subscriptions_pool_swaps,
124 cmd.instrument_id,
125 "pool swaps",
126 ) {
127 self.client.subscribe_pool_swaps(cmd)?;
128 }
129 Ok(())
130 }
131
132 fn subscribe_pool_liquidity_updates(
138 &mut self,
139 cmd: SubscribePoolLiquidityUpdates,
140 ) -> anyhow::Result<()> {
141 if Self::track_subscribe(
142 &mut self.subscriptions_pool_liquidity_updates,
143 cmd.instrument_id,
144 "pool liquidity updates",
145 ) {
146 self.client.subscribe_pool_liquidity_updates(cmd)?;
147 }
148 Ok(())
149 }
150
151 fn subscribe_pool_fee_collects(&mut self, cmd: SubscribePoolFeeCollects) -> anyhow::Result<()> {
157 if Self::track_subscribe(
158 &mut self.subscriptions_pool_fee_collects,
159 cmd.instrument_id,
160 "pool fee collects",
161 ) {
162 self.client.subscribe_pool_fee_collects(cmd)?;
163 }
164 Ok(())
165 }
166
167 fn subscribe_pool_flash_events(&mut self, cmd: SubscribePoolFlashEvents) -> anyhow::Result<()> {
173 if Self::track_subscribe(
174 &mut self.subscriptions_pool_flash,
175 cmd.instrument_id,
176 "pool flash events",
177 ) {
178 self.client.subscribe_pool_flash_events(cmd)?;
179 }
180 Ok(())
181 }
182
183 fn unsubscribe_pool(&mut self, cmd: &UnsubscribePool) -> anyhow::Result<()> {
189 if Self::track_unsubscribe(&mut self.subscriptions_pools, cmd.instrument_id, "pool") {
190 self.client.unsubscribe_pool(cmd)?;
191 }
192 Ok(())
193 }
194
195 fn unsubscribe_pool_swaps(&mut self, cmd: &UnsubscribePoolSwaps) -> anyhow::Result<()> {
201 if Self::track_unsubscribe(
202 &mut self.subscriptions_pool_swaps,
203 cmd.instrument_id,
204 "pool swaps",
205 ) {
206 self.client.unsubscribe_pool_swaps(cmd)?;
207 }
208 Ok(())
209 }
210
211 fn unsubscribe_pool_liquidity_updates(
217 &mut self,
218 cmd: &UnsubscribePoolLiquidityUpdates,
219 ) -> anyhow::Result<()> {
220 if Self::track_unsubscribe(
221 &mut self.subscriptions_pool_liquidity_updates,
222 cmd.instrument_id,
223 "pool liquidity updates",
224 ) {
225 self.client.unsubscribe_pool_liquidity_updates(cmd)?;
226 }
227 Ok(())
228 }
229
230 fn unsubscribe_pool_fee_collects(
236 &mut self,
237 cmd: &UnsubscribePoolFeeCollects,
238 ) -> anyhow::Result<()> {
239 if Self::track_unsubscribe(
240 &mut self.subscriptions_pool_fee_collects,
241 cmd.instrument_id,
242 "pool fee collects",
243 ) {
244 self.client.unsubscribe_pool_fee_collects(cmd)?;
245 }
246 Ok(())
247 }
248
249 fn unsubscribe_pool_flash_events(
255 &mut self,
256 cmd: &UnsubscribePoolFlashEvents,
257 ) -> anyhow::Result<()> {
258 if Self::track_unsubscribe(
259 &mut self.subscriptions_pool_flash,
260 cmd.instrument_id,
261 "pool flash events",
262 ) {
263 self.client.unsubscribe_pool_flash_events(cmd)?;
264 }
265 Ok(())
266 }
267
268 pub fn request_pool_snapshot(&self, req: RequestPoolSnapshot) -> anyhow::Result<()> {
274 self.client.request_pool_snapshot(req)
275 }
276}