nautilus_model/ffi/events/
order.rs

1// -------------------------------------------------------------------------------------------------
2//  Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved.
3//  https://nautechsystems.io
4//
5//  Licensed under the GNU Lesser General Public License Version 3.0 (the "License");
6//  You may not use this file except in compliance with the License.
7//  You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html
8//
9//  Unless required by applicable law or agreed to in writing, software
10//  distributed under the License is distributed on an "AS IS" BASIS,
11//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//  See the License for the specific language governing permissions and
13//  limitations under the License.
14// -------------------------------------------------------------------------------------------------
15
16use 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/// # Safety
29///
30/// - Assumes `reason_ptr` is a valid C string pointer.
31#[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/// # Safety
150///
151/// - Assumes `reason_ptr` is a valid C string pointer.
152#[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}