Skip to main content

sandbox_quant/exchange/
types.rs

1use crate::domain::balance::BalanceSnapshot;
2use crate::domain::instrument::Instrument;
3use crate::domain::market::Market;
4use crate::domain::order::OpenOrder;
5use crate::domain::order_type::OrderType;
6use crate::domain::position::{PositionSnapshot, Side};
7use crate::execution::planner::ExecutionPlan;
8
9#[derive(Debug, Clone, Default, PartialEq)]
10pub struct AuthoritativeSnapshot {
11    pub balances: Vec<BalanceSnapshot>,
12    pub positions: Vec<PositionSnapshot>,
13    pub open_orders: Vec<OpenOrder>,
14}
15
16#[derive(Debug, Clone, PartialEq)]
17pub struct CloseOrderRequest {
18    pub instrument: Instrument,
19    pub market: Market,
20    pub side: Side,
21    pub qty: f64,
22    pub qty_text: String,
23    pub order_type: OrderType,
24    pub reduce_only: bool,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq)]
28pub struct CloseOrderAccepted {
29    pub remote_order_id: String,
30}
31
32#[derive(Debug, Clone, PartialEq)]
33pub struct SubmitOrderAccepted {
34    pub remote_order_id: String,
35}
36
37impl From<ExecutionPlan> for CloseOrderRequest {
38    fn from(plan: ExecutionPlan) -> Self {
39        Self {
40            instrument: plan.instrument,
41            market: Market::Spot,
42            side: plan.side,
43            qty: plan.qty,
44            qty_text: plan.qty.to_string(),
45            order_type: OrderType::Market,
46            reduce_only: plan.reduce_only,
47        }
48    }
49}