dbn/record/
impl_default.rs

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    /// Creates a new `RecordHeader` with `rtype` and `length` set
12    /// for `R` while the other fields are set to their defaults.
13    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    /// Creates a new default `BboMsg` for the given `schema`.
101    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    /// Creates a new default `Cmbp1Msg` for the given `schema`.
120    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    /// Creates a new default `Cmbp1Msg` for the given `schema`.
138    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    /// Creates a new default OHLCV bar for the given `schema`.
175    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}