nautilus_model/ffi/data/
deltas.rs1use nautilus_core::{UnixNanos, ffi::cvec::CVec};
17
18use crate::{
19 data::{OrderBookDelta, OrderBookDeltas, OrderBookDeltas_API},
20 enums::BookAction,
21 identifiers::InstrumentId,
22};
23
24#[unsafe(no_mangle)]
30pub extern "C" fn orderbook_deltas_new(
31 instrument_id: InstrumentId,
32 deltas: &CVec,
33) -> OrderBookDeltas_API {
34 let CVec { ptr, len, cap } = *deltas;
35 let deltas: Vec<OrderBookDelta> =
36 unsafe { Vec::from_raw_parts(ptr.cast::<OrderBookDelta>(), len, cap) };
37 let cloned_deltas = deltas.clone();
38 std::mem::forget(deltas); OrderBookDeltas_API::new(OrderBookDeltas::new(instrument_id, cloned_deltas))
40}
41
42#[unsafe(no_mangle)]
43pub extern "C" fn orderbook_deltas_drop(deltas: OrderBookDeltas_API) {
44 drop(deltas); }
46
47#[unsafe(no_mangle)]
48pub extern "C" fn orderbook_deltas_clone(deltas: &OrderBookDeltas_API) -> OrderBookDeltas_API {
49 deltas.clone()
50}
51
52#[unsafe(no_mangle)]
53pub extern "C" fn orderbook_deltas_instrument_id(deltas: &OrderBookDeltas_API) -> InstrumentId {
54 deltas.instrument_id
55}
56
57#[unsafe(no_mangle)]
58pub extern "C" fn orderbook_deltas_vec_deltas(deltas: &OrderBookDeltas_API) -> CVec {
59 deltas.deltas.clone().into()
60}
61
62#[unsafe(no_mangle)]
66pub extern "C" fn orderbook_deltas_is_snapshot(deltas: &OrderBookDeltas_API) -> u8 {
67 deltas
68 .deltas
69 .first()
70 .map_or(0, |first| u8::from(first.action == BookAction::Clear))
71}
72
73#[unsafe(no_mangle)]
74pub extern "C" fn orderbook_deltas_flags(deltas: &OrderBookDeltas_API) -> u8 {
75 deltas.flags
76}
77
78#[unsafe(no_mangle)]
79pub extern "C" fn orderbook_deltas_sequence(deltas: &OrderBookDeltas_API) -> u64 {
80 deltas.sequence
81}
82
83#[unsafe(no_mangle)]
84pub extern "C" fn orderbook_deltas_ts_event(deltas: &OrderBookDeltas_API) -> UnixNanos {
85 deltas.ts_event
86}
87
88#[unsafe(no_mangle)]
89pub extern "C" fn orderbook_deltas_ts_init(deltas: &OrderBookDeltas_API) -> UnixNanos {
90 deltas.ts_init
91}
92
93#[unsafe(no_mangle)]
99pub extern "C" fn orderbook_deltas_vec_drop(v: CVec) {
100 let CVec { ptr, len, cap } = v;
101
102 assert!(
103 len <= cap,
104 "orderbook_deltas_vec_drop: len ({len}) > cap ({cap})"
105 );
106 assert!(
107 len == 0 || !ptr.is_null(),
108 "orderbook_deltas_vec_drop: null ptr with non-zero len ({len})"
109 );
110
111 let deltas: Vec<OrderBookDelta> =
112 unsafe { Vec::from_raw_parts(ptr.cast::<OrderBookDelta>(), len, cap) };
113 drop(deltas); }