1#![allow(clippy::new_without_default)]
3#![allow(clippy::needless_pass_by_value)]
4#![allow(clippy::too_many_arguments)]
5#![allow(unused_imports)]
6
7use fixer::message::Message;
8use fixer::fix_string::FIXString;
9use fixer::errors::MessageRejectErrorEnum;
10use fixer::session::session_id::SessionID;
11
12use rust_decimal::Decimal;
13
14
15use jiff::Timestamp;
16
17use crate::field;
18use crate::tag;
19
20pub struct BidRequest {
22 pub message: Message,
23}
24
25impl BidRequest {
26 pub fn new(client_bid_id: field::ClientBidIDField, bid_request_trans_type: field::BidRequestTransTypeField, tot_no_related_sym: field::TotNoRelatedSymField, bid_type: field::BidTypeField, bid_trade_type: field::BidTradeTypeField, basis_px_type: field::BasisPxTypeField) -> Self {
28 let mut msg = Message::new();
29 msg.header.set_field(tag::MSG_TYPE, FIXString::from("k".to_string()));
30
31 msg.body.set_field(tag::CLIENT_BID_ID, client_bid_id.0);
32
33 msg.body.set_field(tag::BID_REQUEST_TRANS_TYPE, bid_request_trans_type.0);
34
35 msg.body.set_field(tag::TOT_NO_RELATED_SYM, tot_no_related_sym.0);
36
37 msg.body.set_field(tag::BID_TYPE, bid_type.0);
38
39 msg.body.set_field(tag::BID_TRADE_TYPE, bid_trade_type.0);
40
41 msg.body.set_field(tag::BASIS_PX_TYPE, basis_px_type.0);
42
43 Self { message: msg }
44 }
45
46 pub fn from_message(msg: Message) -> Self {
48 Self { message: msg }
49 }
50
51 pub fn to_message(self) -> Message {
53 self.message
54 }
55
56
57
58
59 pub fn set_basis_px_type(&mut self, v: String) {
61 self.message.body.set_field(tag::BASIS_PX_TYPE, FIXString::from(v));
62 }
63
64 pub fn get_basis_px_type(&self) -> Result<String, MessageRejectErrorEnum> {
66 let mut fld = field::BasisPxTypeField::new(String::new());
67 self.message.body.get_field(tag::BASIS_PX_TYPE, &mut fld.0)?;
68 Ok(fld.value().to_string())
69 }
70
71
72 pub fn has_basis_px_type(&self) -> bool {
74 self.message.body.has(tag::BASIS_PX_TYPE)
75 }
76
77
78
79
80 pub fn set_bid_id(&mut self, v: String) {
82 self.message.body.set_field(tag::BID_ID, FIXString::from(v));
83 }
84
85 pub fn get_bid_id(&self) -> Result<String, MessageRejectErrorEnum> {
87 let mut fld = field::BidIDField::new(String::new());
88 self.message.body.get_field(tag::BID_ID, &mut fld.0)?;
89 Ok(fld.value().to_string())
90 }
91
92
93 pub fn has_bid_id(&self) -> bool {
95 self.message.body.has(tag::BID_ID)
96 }
97
98
99
100
101 pub fn set_bid_request_trans_type(&mut self, v: String) {
103 self.message.body.set_field(tag::BID_REQUEST_TRANS_TYPE, FIXString::from(v));
104 }
105
106 pub fn get_bid_request_trans_type(&self) -> Result<String, MessageRejectErrorEnum> {
108 let mut fld = field::BidRequestTransTypeField::new(String::new());
109 self.message.body.get_field(tag::BID_REQUEST_TRANS_TYPE, &mut fld.0)?;
110 Ok(fld.value().to_string())
111 }
112
113
114 pub fn has_bid_request_trans_type(&self) -> bool {
116 self.message.body.has(tag::BID_REQUEST_TRANS_TYPE)
117 }
118
119
120
121
122 pub fn set_bid_trade_type(&mut self, v: String) {
124 self.message.body.set_field(tag::BID_TRADE_TYPE, FIXString::from(v));
125 }
126
127 pub fn get_bid_trade_type(&self) -> Result<String, MessageRejectErrorEnum> {
129 let mut fld = field::BidTradeTypeField::new(String::new());
130 self.message.body.get_field(tag::BID_TRADE_TYPE, &mut fld.0)?;
131 Ok(fld.value().to_string())
132 }
133
134
135 pub fn has_bid_trade_type(&self) -> bool {
137 self.message.body.has(tag::BID_TRADE_TYPE)
138 }
139
140
141
142
143 pub fn set_bid_type(&mut self, v: isize) {
145 self.message.body.set_field(tag::BID_TYPE, fixer::fix_int::FIXInt::from(v));
146 }
147
148 pub fn get_bid_type(&self) -> Result<isize, MessageRejectErrorEnum> {
150 let mut fld = field::BidTypeField::new(0);
151 self.message.body.get_field(tag::BID_TYPE, &mut fld.0)?;
152 Ok(fld.value())
153 }
154
155
156 pub fn has_bid_type(&self) -> bool {
158 self.message.body.has(tag::BID_TYPE)
159 }
160
161
162
163
164 pub fn set_client_bid_id(&mut self, v: String) {
166 self.message.body.set_field(tag::CLIENT_BID_ID, FIXString::from(v));
167 }
168
169 pub fn get_client_bid_id(&self) -> Result<String, MessageRejectErrorEnum> {
171 let mut fld = field::ClientBidIDField::new(String::new());
172 self.message.body.get_field(tag::CLIENT_BID_ID, &mut fld.0)?;
173 Ok(fld.value().to_string())
174 }
175
176
177 pub fn has_client_bid_id(&self) -> bool {
179 self.message.body.has(tag::CLIENT_BID_ID)
180 }
181
182
183
184
185 pub fn set_cross_percent(&mut self, val: Decimal, scale: i32) {
187 self.message.body.set_field(tag::CROSS_PERCENT, fixer::fix_decimal::FIXDecimal { decimal: val, scale });
188 }
189
190 pub fn get_cross_percent(&self) -> Result<Decimal, MessageRejectErrorEnum> {
192 let mut fld = field::CrossPercentField::new(Decimal::ZERO, 0);
193 self.message.body.get_field(tag::CROSS_PERCENT, &mut fld.0)?;
194 Ok(fld.value())
195 }
196
197
198 pub fn has_cross_percent(&self) -> bool {
200 self.message.body.has(tag::CROSS_PERCENT)
201 }
202
203
204
205
206 pub fn set_currency(&mut self, v: String) {
208 self.message.body.set_field(tag::CURRENCY, FIXString::from(v));
209 }
210
211 pub fn get_currency(&self) -> Result<String, MessageRejectErrorEnum> {
213 let mut fld = field::CurrencyField::new(String::new());
214 self.message.body.get_field(tag::CURRENCY, &mut fld.0)?;
215 Ok(fld.value().to_string())
216 }
217
218
219 pub fn has_currency(&self) -> bool {
221 self.message.body.has(tag::CURRENCY)
222 }
223
224
225
226
227 pub fn set_encoded_text(&mut self, v: String) {
229 self.message.body.set_field(tag::ENCODED_TEXT, FIXString::from(v));
230 }
231
232 pub fn get_encoded_text(&self) -> Result<String, MessageRejectErrorEnum> {
234 let mut fld = field::EncodedTextField::new(String::new());
235 self.message.body.get_field(tag::ENCODED_TEXT, &mut fld.0)?;
236 Ok(fld.value().to_string())
237 }
238
239
240 pub fn has_encoded_text(&self) -> bool {
242 self.message.body.has(tag::ENCODED_TEXT)
243 }
244
245
246
247
248 pub fn set_encoded_text_len(&mut self, v: isize) {
250 self.message.body.set_field(tag::ENCODED_TEXT_LEN, fixer::fix_int::FIXInt::from(v));
251 }
252
253 pub fn get_encoded_text_len(&self) -> Result<isize, MessageRejectErrorEnum> {
255 let mut fld = field::EncodedTextLenField::new(0);
256 self.message.body.get_field(tag::ENCODED_TEXT_LEN, &mut fld.0)?;
257 Ok(fld.value())
258 }
259
260
261 pub fn has_encoded_text_len(&self) -> bool {
263 self.message.body.has(tag::ENCODED_TEXT_LEN)
264 }
265
266
267
268
269 pub fn set_exchange_for_physical(&mut self, v: bool) {
271 self.message.body.set_field(tag::EXCHANGE_FOR_PHYSICAL, fixer::fix_boolean::FIXBoolean::from(v));
272 }
273
274 pub fn get_exchange_for_physical(&self) -> Result<bool, MessageRejectErrorEnum> {
276 let mut fld = field::ExchangeForPhysicalField::new(false);
277 self.message.body.get_field(tag::EXCHANGE_FOR_PHYSICAL, &mut fld.0)?;
278 Ok(fld.value())
279 }
280
281
282 pub fn has_exchange_for_physical(&self) -> bool {
284 self.message.body.has(tag::EXCHANGE_FOR_PHYSICAL)
285 }
286
287
288
289
290 pub fn set_forex_req(&mut self, v: bool) {
292 self.message.body.set_field(tag::FOREX_REQ, fixer::fix_boolean::FIXBoolean::from(v));
293 }
294
295 pub fn get_forex_req(&self) -> Result<bool, MessageRejectErrorEnum> {
297 let mut fld = field::ForexReqField::new(false);
298 self.message.body.get_field(tag::FOREX_REQ, &mut fld.0)?;
299 Ok(fld.value())
300 }
301
302
303 pub fn has_forex_req(&self) -> bool {
305 self.message.body.has(tag::FOREX_REQ)
306 }
307
308
309
310
311 pub fn set_inc_tax_ind(&mut self, v: isize) {
313 self.message.body.set_field(tag::INC_TAX_IND, fixer::fix_int::FIXInt::from(v));
314 }
315
316 pub fn get_inc_tax_ind(&self) -> Result<isize, MessageRejectErrorEnum> {
318 let mut fld = field::IncTaxIndField::new(0);
319 self.message.body.get_field(tag::INC_TAX_IND, &mut fld.0)?;
320 Ok(fld.value())
321 }
322
323
324 pub fn has_inc_tax_ind(&self) -> bool {
326 self.message.body.has(tag::INC_TAX_IND)
327 }
328
329
330
331
332 pub fn set_liquidity_ind_type(&mut self, v: isize) {
334 self.message.body.set_field(tag::LIQUIDITY_IND_TYPE, fixer::fix_int::FIXInt::from(v));
335 }
336
337 pub fn get_liquidity_ind_type(&self) -> Result<isize, MessageRejectErrorEnum> {
339 let mut fld = field::LiquidityIndTypeField::new(0);
340 self.message.body.get_field(tag::LIQUIDITY_IND_TYPE, &mut fld.0)?;
341 Ok(fld.value())
342 }
343
344
345 pub fn has_liquidity_ind_type(&self) -> bool {
347 self.message.body.has(tag::LIQUIDITY_IND_TYPE)
348 }
349
350
351
352
353 pub fn set_list_name(&mut self, v: String) {
355 self.message.body.set_field(tag::LIST_NAME, FIXString::from(v));
356 }
357
358 pub fn get_list_name(&self) -> Result<String, MessageRejectErrorEnum> {
360 let mut fld = field::ListNameField::new(String::new());
361 self.message.body.get_field(tag::LIST_NAME, &mut fld.0)?;
362 Ok(fld.value().to_string())
363 }
364
365
366 pub fn has_list_name(&self) -> bool {
368 self.message.body.has(tag::LIST_NAME)
369 }
370
371
372
373
374 pub fn set_no_bid_components(&mut self, v: isize) {
376 self.message.body.set_field(tag::NO_BID_COMPONENTS, fixer::fix_int::FIXInt::from(v));
377 }
378
379 pub fn get_no_bid_components(&self) -> Result<isize, MessageRejectErrorEnum> {
381 let mut fld = field::NoBidComponentsField::new(0);
382 self.message.body.get_field(tag::NO_BID_COMPONENTS, &mut fld.0)?;
383 Ok(fld.value())
384 }
385
386
387 pub fn has_no_bid_components(&self) -> bool {
389 self.message.body.has(tag::NO_BID_COMPONENTS)
390 }
391
392
393
394
395 pub fn set_no_bid_descriptors(&mut self, v: isize) {
397 self.message.body.set_field(tag::NO_BID_DESCRIPTORS, fixer::fix_int::FIXInt::from(v));
398 }
399
400 pub fn get_no_bid_descriptors(&self) -> Result<isize, MessageRejectErrorEnum> {
402 let mut fld = field::NoBidDescriptorsField::new(0);
403 self.message.body.get_field(tag::NO_BID_DESCRIPTORS, &mut fld.0)?;
404 Ok(fld.value())
405 }
406
407
408 pub fn has_no_bid_descriptors(&self) -> bool {
410 self.message.body.has(tag::NO_BID_DESCRIPTORS)
411 }
412
413
414
415
416 pub fn set_num_bidders(&mut self, v: isize) {
418 self.message.body.set_field(tag::NUM_BIDDERS, fixer::fix_int::FIXInt::from(v));
419 }
420
421 pub fn get_num_bidders(&self) -> Result<isize, MessageRejectErrorEnum> {
423 let mut fld = field::NumBiddersField::new(0);
424 self.message.body.get_field(tag::NUM_BIDDERS, &mut fld.0)?;
425 Ok(fld.value())
426 }
427
428
429 pub fn has_num_bidders(&self) -> bool {
431 self.message.body.has(tag::NUM_BIDDERS)
432 }
433
434
435
436
437 pub fn set_num_tickets(&mut self, v: isize) {
439 self.message.body.set_field(tag::NUM_TICKETS, fixer::fix_int::FIXInt::from(v));
440 }
441
442 pub fn get_num_tickets(&self) -> Result<isize, MessageRejectErrorEnum> {
444 let mut fld = field::NumTicketsField::new(0);
445 self.message.body.get_field(tag::NUM_TICKETS, &mut fld.0)?;
446 Ok(fld.value())
447 }
448
449
450 pub fn has_num_tickets(&self) -> bool {
452 self.message.body.has(tag::NUM_TICKETS)
453 }
454
455
456
457
458 pub fn set_out_main_cntry_u_index(&mut self, val: Decimal, scale: i32) {
460 self.message.body.set_field(tag::OUT_MAIN_CNTRY_U_INDEX, fixer::fix_decimal::FIXDecimal { decimal: val, scale });
461 }
462
463 pub fn get_out_main_cntry_u_index(&self) -> Result<Decimal, MessageRejectErrorEnum> {
465 let mut fld = field::OutMainCntryUIndexField::new(Decimal::ZERO, 0);
466 self.message.body.get_field(tag::OUT_MAIN_CNTRY_U_INDEX, &mut fld.0)?;
467 Ok(fld.value())
468 }
469
470
471 pub fn has_out_main_cntry_u_index(&self) -> bool {
473 self.message.body.has(tag::OUT_MAIN_CNTRY_U_INDEX)
474 }
475
476
477
478
479 pub fn set_prog_period_interval(&mut self, v: isize) {
481 self.message.body.set_field(tag::PROG_PERIOD_INTERVAL, fixer::fix_int::FIXInt::from(v));
482 }
483
484 pub fn get_prog_period_interval(&self) -> Result<isize, MessageRejectErrorEnum> {
486 let mut fld = field::ProgPeriodIntervalField::new(0);
487 self.message.body.get_field(tag::PROG_PERIOD_INTERVAL, &mut fld.0)?;
488 Ok(fld.value())
489 }
490
491
492 pub fn has_prog_period_interval(&self) -> bool {
494 self.message.body.has(tag::PROG_PERIOD_INTERVAL)
495 }
496
497
498
499
500 pub fn set_prog_rpt_reqs(&mut self, v: isize) {
502 self.message.body.set_field(tag::PROG_RPT_REQS, fixer::fix_int::FIXInt::from(v));
503 }
504
505 pub fn get_prog_rpt_reqs(&self) -> Result<isize, MessageRejectErrorEnum> {
507 let mut fld = field::ProgRptReqsField::new(0);
508 self.message.body.get_field(tag::PROG_RPT_REQS, &mut fld.0)?;
509 Ok(fld.value())
510 }
511
512
513 pub fn has_prog_rpt_reqs(&self) -> bool {
515 self.message.body.has(tag::PROG_RPT_REQS)
516 }
517
518
519
520
521 pub fn set_side_value1(&mut self, val: Decimal, scale: i32) {
523 self.message.body.set_field(tag::SIDE_VALUE1, fixer::fix_decimal::FIXDecimal { decimal: val, scale });
524 }
525
526 pub fn get_side_value1(&self) -> Result<Decimal, MessageRejectErrorEnum> {
528 let mut fld = field::SideValue1Field::new(Decimal::ZERO, 0);
529 self.message.body.get_field(tag::SIDE_VALUE1, &mut fld.0)?;
530 Ok(fld.value())
531 }
532
533
534 pub fn has_side_value1(&self) -> bool {
536 self.message.body.has(tag::SIDE_VALUE1)
537 }
538
539
540
541
542 pub fn set_side_value2(&mut self, val: Decimal, scale: i32) {
544 self.message.body.set_field(tag::SIDE_VALUE2, fixer::fix_decimal::FIXDecimal { decimal: val, scale });
545 }
546
547 pub fn get_side_value2(&self) -> Result<Decimal, MessageRejectErrorEnum> {
549 let mut fld = field::SideValue2Field::new(Decimal::ZERO, 0);
550 self.message.body.get_field(tag::SIDE_VALUE2, &mut fld.0)?;
551 Ok(fld.value())
552 }
553
554
555 pub fn has_side_value2(&self) -> bool {
557 self.message.body.has(tag::SIDE_VALUE2)
558 }
559
560
561
562
563 pub fn set_strike_time(&mut self, v: Timestamp) {
565 self.message.body.set_field(tag::STRIKE_TIME, fixer::fix_utc_timestamp::FIXUTCTimestamp {
566 time: v,
567 precision: fixer::fix_utc_timestamp::TimestampPrecision::Millis,
568 });
569 }
570
571 pub fn get_strike_time(&self) -> Result<Timestamp, MessageRejectErrorEnum> {
573 let mut fld = field::StrikeTimeField::new(Timestamp::UNIX_EPOCH);
574 self.message.body.get_field(tag::STRIKE_TIME, &mut fld.0)?;
575 Ok(fld.value())
576 }
577
578
579 pub fn has_strike_time(&self) -> bool {
581 self.message.body.has(tag::STRIKE_TIME)
582 }
583
584
585
586
587 pub fn set_text(&mut self, v: String) {
589 self.message.body.set_field(tag::TEXT, FIXString::from(v));
590 }
591
592 pub fn get_text(&self) -> Result<String, MessageRejectErrorEnum> {
594 let mut fld = field::TextField::new(String::new());
595 self.message.body.get_field(tag::TEXT, &mut fld.0)?;
596 Ok(fld.value().to_string())
597 }
598
599
600 pub fn has_text(&self) -> bool {
602 self.message.body.has(tag::TEXT)
603 }
604
605
606
607
608 pub fn set_tot_no_related_sym(&mut self, v: isize) {
610 self.message.body.set_field(tag::TOT_NO_RELATED_SYM, fixer::fix_int::FIXInt::from(v));
611 }
612
613 pub fn get_tot_no_related_sym(&self) -> Result<isize, MessageRejectErrorEnum> {
615 let mut fld = field::TotNoRelatedSymField::new(0);
616 self.message.body.get_field(tag::TOT_NO_RELATED_SYM, &mut fld.0)?;
617 Ok(fld.value())
618 }
619
620
621 pub fn has_tot_no_related_sym(&self) -> bool {
623 self.message.body.has(tag::TOT_NO_RELATED_SYM)
624 }
625
626
627
628
629 pub fn set_trade_date(&mut self, v: String) {
631 self.message.body.set_field(tag::TRADE_DATE, FIXString::from(v));
632 }
633
634 pub fn get_trade_date(&self) -> Result<String, MessageRejectErrorEnum> {
636 let mut fld = field::TradeDateField::new(String::new());
637 self.message.body.get_field(tag::TRADE_DATE, &mut fld.0)?;
638 Ok(fld.value().to_string())
639 }
640
641
642 pub fn has_trade_date(&self) -> bool {
644 self.message.body.has(tag::TRADE_DATE)
645 }
646
647
648
649
650 pub fn set_wt_average_liquidity(&mut self, val: Decimal, scale: i32) {
652 self.message.body.set_field(tag::WT_AVERAGE_LIQUIDITY, fixer::fix_decimal::FIXDecimal { decimal: val, scale });
653 }
654
655 pub fn get_wt_average_liquidity(&self) -> Result<Decimal, MessageRejectErrorEnum> {
657 let mut fld = field::WtAverageLiquidityField::new(Decimal::ZERO, 0);
658 self.message.body.get_field(tag::WT_AVERAGE_LIQUIDITY, &mut fld.0)?;
659 Ok(fld.value())
660 }
661
662
663 pub fn has_wt_average_liquidity(&self) -> bool {
665 self.message.body.has(tag::WT_AVERAGE_LIQUIDITY)
666 }
667
668
669}
670
671pub type RouteOut = fn(msg: BidRequest, session_id: SessionID) -> Result<(), MessageRejectErrorEnum>;
673
674pub type Route = (&'static str, &'static str, Box<dyn Fn(&Message, SessionID) -> Result<(), MessageRejectErrorEnum> + Send>);
676
677pub fn route(router: RouteOut) -> Route {
679 let r = move |msg: &Message, session_id: SessionID| -> Result<(), MessageRejectErrorEnum> {
680 router(BidRequest::from_message(msg.clone()), session_id)
681 };
682 ("8", "k", Box::new(r))
683}