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