copy_trading/position_manager/
market_update_loop.rs1use crate::types::position::Position;
2use crate::types::position_manager::PositionManager;
3use crate::types::position_status::PositionStatus;
4use std::sync::Arc;
5
6impl PositionManager {
7 pub async fn market_update_loop(position_manager: Arc<PositionManager>) {
10 let mut market_update_receiver = position_manager.market_update_receiver.resubscribe();
11 while let Ok(update) = market_update_receiver.recv().await {
12 if let Some(position_arc) = position_manager
14 .open_positions
15 .read()
16 .unwrap()
17 .get(&update.market_address)
18 {
19 let mut position = position_arc.lock().unwrap();
20 let status = position.status.clone();
21
22 if status == PositionStatus::Open {
24 Position::process_market_update(&mut position, &update, &position_arc, &position_manager);
26 continue;
27 }
28 }
29 }
30 }
31}