nautilus_execution/matching_core/
handlers.rs1use nautilus_core::WeakCell;
17use nautilus_model::orders::OrderAny;
18
19use crate::{
20 matching_engine::engine::OrderMatchingEngine, order_emulator::emulator::OrderEmulator,
21};
22
23pub trait FillMarketOrderHandler {
24 fn fill_market_order(&mut self, order: &OrderAny);
25}
26
27#[derive(Clone, Debug)]
28pub enum FillMarketOrderHandlerAny {
29 OrderMatchingEngine(WeakCell<OrderMatchingEngine>),
30 OrderEmulator(WeakCell<OrderEmulator>),
31}
32
33impl FillMarketOrderHandler for FillMarketOrderHandlerAny {
34 fn fill_market_order(&mut self, order: &OrderAny) {
35 match self {
36 Self::OrderMatchingEngine(engine_weak) => {
37 if let Some(engine) = engine_weak.upgrade() {
38 engine.borrow_mut().fill_market_order(&mut order.clone());
39 }
40 }
41 Self::OrderEmulator(emulator_weak) => {
42 if let Some(emulator) = emulator_weak.upgrade() {
43 emulator.borrow_mut().fill_market_order(&mut order.clone());
44 }
45 }
46 }
47 }
48}
49
50#[derive(Clone, Debug)]
51pub struct ShareableFillMarketOrderHandler(pub FillMarketOrderHandlerAny);
52
53pub trait FillLimitOrderHandler {
54 fn fill_limit_order(&mut self, order: &mut OrderAny);
55}
56
57#[derive(Clone, Debug)]
58pub enum FillLimitOrderHandlerAny {
59 OrderMatchingEngine(WeakCell<OrderMatchingEngine>),
60 OrderEmulator(WeakCell<OrderEmulator>),
61}
62
63impl FillLimitOrderHandler for FillLimitOrderHandlerAny {
64 fn fill_limit_order(&mut self, order: &mut OrderAny) {
65 match self {
66 Self::OrderMatchingEngine(engine_weak) => {
67 if let Some(engine) = engine_weak.upgrade() {
68 engine.borrow_mut().fill_limit_order(order);
69 }
70 }
71 Self::OrderEmulator(emulator_weak) => {
72 if let Some(emulator) = emulator_weak.upgrade() {
73 emulator.borrow_mut().fill_limit_order(order);
74 }
75 }
76 }
77 }
78}
79
80#[derive(Clone, Debug)]
81pub struct ShareableFillLimitOrderHandler(pub FillLimitOrderHandlerAny);
82
83pub trait TriggerStopOrderHandler {
84 fn trigger_stop_order(&mut self, order: &mut OrderAny);
85}
86
87#[derive(Clone, Debug)]
88pub enum TriggerStopOrderHandlerAny {
89 OrderMatchingEngine(WeakCell<OrderMatchingEngine>),
90 OrderEmulator(WeakCell<OrderEmulator>),
91}
92
93impl TriggerStopOrderHandler for TriggerStopOrderHandlerAny {
94 fn trigger_stop_order(&mut self, order: &mut OrderAny) {
95 match self {
96 Self::OrderMatchingEngine(engine_weak) => {
97 if let Some(engine) = engine_weak.upgrade() {
98 engine.borrow_mut().trigger_stop_order(order);
99 }
100 }
101 Self::OrderEmulator(emulator_weak) => {
102 if let Some(emulator) = emulator_weak.upgrade() {
103 emulator.borrow_mut().trigger_stop_order(order);
104 }
105 }
106 }
107 }
108}
109
110#[derive(Clone, Debug)]
111pub struct ShareableTriggerStopOrderHandler(pub TriggerStopOrderHandlerAny);