nautilus_model/ffi/events/
order.rs1use std::ffi::c_char;
17
18use nautilus_core::{ffi::string::cstr_to_ustr, UnixNanos, UUID4};
19
20use crate::{
21 events::{
22 OrderAccepted, OrderDenied, OrderEmulated, OrderRejected, OrderReleased, OrderSubmitted,
23 },
24 identifiers::{AccountId, ClientOrderId, InstrumentId, StrategyId, TraderId, VenueOrderId},
25 types::Price,
26};
27
28#[no_mangle]
32pub unsafe extern "C" fn order_denied_new(
33 trader_id: TraderId,
34 strategy_id: StrategyId,
35 instrument_id: InstrumentId,
36 client_order_id: ClientOrderId,
37 reason_ptr: *const c_char,
38 event_id: UUID4,
39 ts_event: UnixNanos,
40 ts_init: UnixNanos,
41) -> OrderDenied {
42 OrderDenied {
43 trader_id,
44 strategy_id,
45 instrument_id,
46 client_order_id,
47 reason: cstr_to_ustr(reason_ptr),
48 event_id,
49 ts_event,
50 ts_init,
51 }
52}
53
54#[no_mangle]
55pub extern "C" fn order_emulated_new(
56 trader_id: TraderId,
57 strategy_id: StrategyId,
58 instrument_id: InstrumentId,
59 client_order_id: ClientOrderId,
60 event_id: UUID4,
61 ts_event: UnixNanos,
62 ts_init: UnixNanos,
63) -> OrderEmulated {
64 OrderEmulated {
65 trader_id,
66 strategy_id,
67 instrument_id,
68 client_order_id,
69 event_id,
70 ts_event,
71 ts_init,
72 }
73}
74
75#[no_mangle]
76#[cfg_attr(feature = "high-precision", allow(improper_ctypes_definitions))]
77pub extern "C" fn order_released_new(
78 trader_id: TraderId,
79 strategy_id: StrategyId,
80 instrument_id: InstrumentId,
81 client_order_id: ClientOrderId,
82 released_price: Price,
83 event_id: UUID4,
84 ts_event: UnixNanos,
85 ts_init: UnixNanos,
86) -> OrderReleased {
87 OrderReleased {
88 trader_id,
89 strategy_id,
90 instrument_id,
91 client_order_id,
92 released_price,
93 event_id,
94 ts_event,
95 ts_init,
96 }
97}
98
99#[no_mangle]
100pub extern "C" fn order_submitted_new(
101 trader_id: TraderId,
102 strategy_id: StrategyId,
103 instrument_id: InstrumentId,
104 client_order_id: ClientOrderId,
105 account_id: AccountId,
106 event_id: UUID4,
107 ts_event: UnixNanos,
108 ts_init: UnixNanos,
109) -> OrderSubmitted {
110 OrderSubmitted {
111 trader_id,
112 strategy_id,
113 instrument_id,
114 client_order_id,
115 account_id,
116 event_id,
117 ts_event,
118 ts_init,
119 }
120}
121
122#[no_mangle]
123pub extern "C" fn order_accepted_new(
124 trader_id: TraderId,
125 strategy_id: StrategyId,
126 instrument_id: InstrumentId,
127 client_order_id: ClientOrderId,
128 venue_order_id: VenueOrderId,
129 account_id: AccountId,
130 event_id: UUID4,
131 ts_event: UnixNanos,
132 ts_init: UnixNanos,
133 reconciliation: u8,
134) -> OrderAccepted {
135 OrderAccepted {
136 trader_id,
137 strategy_id,
138 instrument_id,
139 client_order_id,
140 venue_order_id,
141 account_id,
142 event_id,
143 ts_event,
144 ts_init,
145 reconciliation,
146 }
147}
148
149#[no_mangle]
153pub unsafe extern "C" fn order_rejected_new(
154 trader_id: TraderId,
155 strategy_id: StrategyId,
156 instrument_id: InstrumentId,
157 client_order_id: ClientOrderId,
158 account_id: AccountId,
159 reason_ptr: *const c_char,
160 event_id: UUID4,
161 ts_event: UnixNanos,
162 ts_init: UnixNanos,
163 reconciliation: u8,
164) -> OrderRejected {
165 OrderRejected {
166 trader_id,
167 strategy_id,
168 instrument_id,
169 client_order_id,
170 account_id,
171 reason: cstr_to_ustr(reason_ptr),
172 event_id,
173 ts_event,
174 ts_init,
175 reconciliation,
176 }
177}