1use std::ffi::c_char;
2
3use crate::{
4 Schema, StatusAction, StatusReason, TradingEvent, TriState, UNDEF_ORDER_SIZE, UNDEF_PRICE,
5 UNDEF_STAT_QUANTITY, UNDEF_TIMESTAMP,
6};
7
8use super::*;
9
10impl RecordHeader {
11 pub const fn default<R: HasRType>(rtype: u8) -> Self {
14 Self::new::<R>(rtype, 0, 0, UNDEF_TIMESTAMP)
15 }
16}
17
18impl Default for MboMsg {
19 fn default() -> Self {
20 Self {
21 hd: RecordHeader::default::<Self>(rtype::MBO),
22 order_id: 0,
23 price: UNDEF_PRICE,
24 size: UNDEF_ORDER_SIZE,
25 flags: FlagSet::default(),
26 channel_id: 0,
27 action: Action::default() as c_char,
28 side: Side::default() as c_char,
29 ts_recv: UNDEF_TIMESTAMP,
30 ts_in_delta: 0,
31 sequence: 0,
32 }
33 }
34}
35
36impl Default for BidAskPair {
37 fn default() -> Self {
38 Self {
39 bid_px: UNDEF_PRICE,
40 ask_px: UNDEF_PRICE,
41 bid_sz: 0,
42 ask_sz: 0,
43 bid_ct: 0,
44 ask_ct: 0,
45 }
46 }
47}
48
49impl Default for ConsolidatedBidAskPair {
50 fn default() -> Self {
51 Self {
52 bid_px: UNDEF_PRICE,
53 ask_px: UNDEF_PRICE,
54 bid_sz: 0,
55 ask_sz: 0,
56 bid_pb: 0,
57 ask_pb: 0,
58 _reserved1: [0; 2],
59 _reserved2: [0; 2],
60 }
61 }
62}
63
64impl Default for TradeMsg {
65 fn default() -> Self {
66 Self {
67 hd: RecordHeader::default::<Self>(rtype::MBP_0),
68 price: UNDEF_PRICE,
69 size: UNDEF_ORDER_SIZE,
70 action: Action::default() as c_char,
71 side: Side::default() as c_char,
72 flags: FlagSet::default(),
73 depth: 0,
74 ts_recv: UNDEF_TIMESTAMP,
75 ts_in_delta: 0,
76 sequence: 0,
77 }
78 }
79}
80
81impl Default for Mbp1Msg {
82 fn default() -> Self {
83 Self {
84 hd: RecordHeader::default::<Self>(rtype::MBP_1),
85 price: UNDEF_PRICE,
86 size: UNDEF_ORDER_SIZE,
87 action: Action::default() as c_char,
88 side: Side::default() as c_char,
89 flags: FlagSet::default(),
90 depth: 0,
91 ts_recv: UNDEF_TIMESTAMP,
92 ts_in_delta: 0,
93 sequence: 0,
94 levels: Default::default(),
95 }
96 }
97}
98
99impl BboMsg {
100 pub fn default_for_schema(schema: Schema) -> Self {
102 Self {
103 hd: RecordHeader::default::<Self>(RType::from(schema) as u8),
104 price: UNDEF_PRICE,
105 size: UNDEF_ORDER_SIZE,
106 side: Side::default() as c_char,
107 flags: FlagSet::default(),
108 ts_recv: UNDEF_TIMESTAMP,
109 sequence: 0,
110 levels: Default::default(),
111 _reserved1: Default::default(),
112 _reserved2: Default::default(),
113 _reserved3: Default::default(),
114 }
115 }
116}
117
118impl CbboMsg {
119 pub fn default_for_schema(schema: Schema) -> Self {
121 Self {
122 hd: RecordHeader::default::<Self>(RType::from(schema) as u8),
123 price: UNDEF_PRICE,
124 size: UNDEF_ORDER_SIZE,
125 side: Side::default() as c_char,
126 flags: FlagSet::default(),
127 ts_recv: UNDEF_TIMESTAMP,
128 _reserved1: 0,
129 _reserved2: 0,
130 _reserved3: Default::default(),
131 levels: Default::default(),
132 }
133 }
134}
135
136impl Cmbp1Msg {
137 pub fn default_for_schema(schema: Schema) -> Self {
139 Self {
140 hd: RecordHeader::default::<Self>(RType::from(schema) as u8),
141 price: UNDEF_PRICE,
142 size: UNDEF_ORDER_SIZE,
143 action: Action::default() as c_char,
144 side: Side::default() as c_char,
145 flags: FlagSet::default(),
146 _reserved1: [0; 1],
147 ts_recv: UNDEF_TIMESTAMP,
148 ts_in_delta: 0,
149 _reserved2: [0; 4],
150 levels: Default::default(),
151 }
152 }
153}
154
155impl Default for Mbp10Msg {
156 fn default() -> Self {
157 Self {
158 hd: RecordHeader::default::<Self>(rtype::MBP_10),
159 price: UNDEF_PRICE,
160 size: UNDEF_ORDER_SIZE,
161 action: Action::default() as c_char,
162 side: Side::default() as c_char,
163 flags: FlagSet::default(),
164 depth: 0,
165 ts_recv: UNDEF_TIMESTAMP,
166 ts_in_delta: 0,
167 sequence: 0,
168 levels: Default::default(),
169 }
170 }
171}
172
173impl OhlcvMsg {
174 pub fn default_for_schema(schema: Schema) -> Self {
176 Self {
177 hd: RecordHeader::default::<Self>(RType::from(schema) as u8),
178 open: UNDEF_PRICE,
179 high: UNDEF_PRICE,
180 low: UNDEF_PRICE,
181 close: UNDEF_PRICE,
182 volume: 0,
183 }
184 }
185}
186
187impl Default for StatusMsg {
188 fn default() -> Self {
189 Self {
190 hd: RecordHeader::default::<Self>(rtype::STATUS),
191 ts_recv: UNDEF_TIMESTAMP,
192 action: StatusAction::default() as u16,
193 reason: StatusReason::default() as u16,
194 trading_event: TradingEvent::default() as u16,
195 is_trading: TriState::default() as u8 as c_char,
196 is_quoting: TriState::default() as u8 as c_char,
197 is_short_sell_restricted: TriState::default() as u8 as c_char,
198 _reserved: Default::default(),
199 }
200 }
201}
202
203impl Default for InstrumentDefMsg {
204 fn default() -> Self {
205 Self {
206 hd: RecordHeader::default::<Self>(rtype::INSTRUMENT_DEF),
207 ts_recv: UNDEF_TIMESTAMP,
208 min_price_increment: UNDEF_PRICE,
209 display_factor: UNDEF_PRICE,
210 expiration: UNDEF_TIMESTAMP,
211 activation: UNDEF_TIMESTAMP,
212 high_limit_price: UNDEF_PRICE,
213 low_limit_price: UNDEF_PRICE,
214 max_price_variation: UNDEF_PRICE,
215 unit_of_measure_qty: UNDEF_PRICE,
216 min_price_increment_amount: UNDEF_PRICE,
217 price_ratio: UNDEF_PRICE,
218 inst_attrib_value: i32::MAX,
219 underlying_id: 0,
220 raw_instrument_id: 0,
221 market_depth_implied: i32::MAX,
222 market_depth: i32::MAX,
223 market_segment_id: u32::MAX,
224 max_trade_vol: u32::MAX,
225 min_lot_size: i32::MAX,
226 min_lot_size_block: i32::MAX,
227 min_lot_size_round_lot: i32::MAX,
228 min_trade_vol: u32::MAX,
229 contract_multiplier: i32::MAX,
230 decay_quantity: i32::MAX,
231 original_contract_size: i32::MAX,
232 appl_id: i16::MAX,
233 maturity_year: u16::MAX,
234 decay_start_date: u16::MAX,
235 channel_id: u16::MAX,
236 currency: Default::default(),
237 settl_currency: Default::default(),
238 secsubtype: Default::default(),
239 raw_symbol: [0; SYMBOL_CSTR_LEN],
240 group: Default::default(),
241 exchange: Default::default(),
242 asset: Default::default(),
243 cfi: Default::default(),
244 security_type: Default::default(),
245 unit_of_measure: Default::default(),
246 underlying: Default::default(),
247 strike_price_currency: Default::default(),
248 instrument_class: 0,
249 strike_price: UNDEF_PRICE,
250 match_algorithm: MatchAlgorithm::Undefined as c_char,
251 main_fraction: u8::MAX,
252 price_display_format: u8::MAX,
253 sub_fraction: u8::MAX,
254 underlying_product: u8::MAX,
255 security_update_action: SecurityUpdateAction::Add as c_char,
256 maturity_month: u8::MAX,
257 maturity_day: u8::MAX,
258 maturity_week: u8::MAX,
259 user_defined_instrument: UserDefinedInstrument::No as c_char,
260 contract_multiplier_unit: i8::MAX,
261 flow_schedule_type: i8::MAX,
262 tick_rule: u8::MAX,
263 leg_count: 0,
264 leg_index: 0,
265 leg_price: UNDEF_PRICE,
266 leg_delta: UNDEF_PRICE,
267 leg_instrument_id: 0,
268 leg_ratio_price_numerator: 0,
269 leg_ratio_price_denominator: 0,
270 leg_ratio_qty_numerator: 0,
271 leg_ratio_qty_denominator: 0,
272 leg_underlying_id: 0,
273 leg_raw_symbol: [0; SYMBOL_CSTR_LEN],
274 leg_instrument_class: 0,
275 leg_side: Side::None as c_char,
276 _reserved: Default::default(),
277 }
278 }
279}
280
281impl Default for ImbalanceMsg {
282 fn default() -> Self {
283 Self {
284 hd: RecordHeader::default::<Self>(rtype::IMBALANCE),
285 ts_recv: UNDEF_TIMESTAMP,
286 ref_price: UNDEF_PRICE,
287 auction_time: UNDEF_TIMESTAMP,
288 cont_book_clr_price: UNDEF_PRICE,
289 auct_interest_clr_price: UNDEF_PRICE,
290 ssr_filling_price: UNDEF_PRICE,
291 ind_match_price: UNDEF_PRICE,
292 upper_collar: UNDEF_PRICE,
293 lower_collar: UNDEF_PRICE,
294 paired_qty: UNDEF_ORDER_SIZE,
295 total_imbalance_qty: UNDEF_ORDER_SIZE,
296 market_imbalance_qty: UNDEF_ORDER_SIZE,
297 unpaired_qty: UNDEF_ORDER_SIZE,
298 auction_type: b'~' as c_char,
299 side: Side::default() as c_char,
300 auction_status: 0,
301 freeze_status: 0,
302 num_extensions: 0,
303 unpaired_side: 0,
304 significant_imbalance: b'~' as c_char,
305 _reserved: Default::default(),
306 }
307 }
308}
309
310impl Default for StatMsg {
311 fn default() -> Self {
312 Self {
313 hd: RecordHeader::default::<Self>(rtype::STATISTICS),
314 ts_recv: UNDEF_TIMESTAMP,
315 ts_ref: UNDEF_TIMESTAMP,
316 price: UNDEF_PRICE,
317 quantity: UNDEF_STAT_QUANTITY,
318 sequence: 0,
319 ts_in_delta: 0,
320 stat_type: 0,
321 channel_id: 0,
322 update_action: StatUpdateAction::New as u8,
323 stat_flags: 0,
324 _reserved: Default::default(),
325 }
326 }
327}
328
329impl Default for ErrorMsg {
330 fn default() -> Self {
331 Self {
332 hd: RecordHeader::default::<Self>(rtype::ERROR),
333 err: [0; 302],
334 code: u8::MAX,
335 is_last: u8::MAX,
336 }
337 }
338}
339
340impl Default for SymbolMappingMsg {
341 fn default() -> Self {
342 Self {
343 hd: RecordHeader::default::<Self>(rtype::SYMBOL_MAPPING),
344 stype_in: u8::MAX,
345 stype_in_symbol: [0; SYMBOL_CSTR_LEN],
346 stype_out: u8::MAX,
347 stype_out_symbol: [0; SYMBOL_CSTR_LEN],
348 start_ts: UNDEF_TIMESTAMP,
349 end_ts: UNDEF_TIMESTAMP,
350 }
351 }
352}
353
354impl Default for SystemMsg {
355 fn default() -> Self {
356 Self {
357 hd: RecordHeader::default::<Self>(rtype::SYSTEM),
358 msg: [0; 303],
359 code: u8::MAX,
360 }
361 }
362}