Skip to main content

fixer_fix/fix50/
bid_request.rs

1// Code generated by fixer-gen. DO NOT EDIT.
2#![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
20/// `BidRequest` is the `fix50` `BidRequest` type, `MsgType` = k.
21pub struct BidRequest {
22    pub message: Message,
23}
24
25impl BidRequest {
26    /// Creates a new `BidRequest` with required fields.
27    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    /// Creates a `BidRequest` from an existing `Message`.
47    pub fn from_message(msg: Message) -> Self {
48        Self { message: msg }
49    }
50
51    /// Returns the underlying `Message`.
52    pub fn to_message(self) -> Message {
53        self.message
54    }
55
56
57
58
59    /// Sets `BasisPxType`, Tag 419.
60    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    /// Gets `BasisPxType`, Tag 419.
65    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    /// Returns true if `BasisPxType` is present, Tag 419.
73    pub fn has_basis_px_type(&self) -> bool {
74        self.message.body.has(tag::BASIS_PX_TYPE)
75    }
76
77
78
79
80    /// Sets `BidID`, Tag 390.
81    pub fn set_bid_id(&mut self, v: String) {
82        self.message.body.set_field(tag::BID_ID, FIXString::from(v));
83    }
84
85    /// Gets `BidID`, Tag 390.
86    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    /// Returns true if `BidID` is present, Tag 390.
94    pub fn has_bid_id(&self) -> bool {
95        self.message.body.has(tag::BID_ID)
96    }
97
98
99
100
101    /// Sets `BidRequestTransType`, Tag 374.
102    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    /// Gets `BidRequestTransType`, Tag 374.
107    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    /// Returns true if `BidRequestTransType` is present, Tag 374.
115    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    /// Sets `BidTradeType`, Tag 418.
123    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    /// Gets `BidTradeType`, Tag 418.
128    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    /// Returns true if `BidTradeType` is present, Tag 418.
136    pub fn has_bid_trade_type(&self) -> bool {
137        self.message.body.has(tag::BID_TRADE_TYPE)
138    }
139
140
141
142
143    /// Sets `BidType`, Tag 394.
144    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    /// Gets `BidType`, Tag 394.
149    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    /// Returns true if `BidType` is present, Tag 394.
157    pub fn has_bid_type(&self) -> bool {
158        self.message.body.has(tag::BID_TYPE)
159    }
160
161
162
163
164    /// Sets `ClientBidID`, Tag 391.
165    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    /// Gets `ClientBidID`, Tag 391.
170    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    /// Returns true if `ClientBidID` is present, Tag 391.
178    pub fn has_client_bid_id(&self) -> bool {
179        self.message.body.has(tag::CLIENT_BID_ID)
180    }
181
182
183
184
185    /// Sets `CrossPercent`, Tag 413.
186    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    /// Gets `CrossPercent`, Tag 413.
191    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    /// Returns true if `CrossPercent` is present, Tag 413.
199    pub fn has_cross_percent(&self) -> bool {
200        self.message.body.has(tag::CROSS_PERCENT)
201    }
202
203
204
205
206    /// Sets `Currency`, Tag 15.
207    pub fn set_currency(&mut self, v: String) {
208        self.message.body.set_field(tag::CURRENCY, FIXString::from(v));
209    }
210
211    /// Gets `Currency`, Tag 15.
212    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    /// Returns true if `Currency` is present, Tag 15.
220    pub fn has_currency(&self) -> bool {
221        self.message.body.has(tag::CURRENCY)
222    }
223
224
225
226
227    /// Sets `EncodedText`, Tag 355.
228    pub fn set_encoded_text(&mut self, v: String) {
229        self.message.body.set_field(tag::ENCODED_TEXT, FIXString::from(v));
230    }
231
232    /// Gets `EncodedText`, Tag 355.
233    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    /// Returns true if `EncodedText` is present, Tag 355.
241    pub fn has_encoded_text(&self) -> bool {
242        self.message.body.has(tag::ENCODED_TEXT)
243    }
244
245
246
247
248    /// Sets `EncodedTextLen`, Tag 354.
249    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    /// Gets `EncodedTextLen`, Tag 354.
254    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    /// Returns true if `EncodedTextLen` is present, Tag 354.
262    pub fn has_encoded_text_len(&self) -> bool {
263        self.message.body.has(tag::ENCODED_TEXT_LEN)
264    }
265
266
267
268
269    /// Sets `ExchangeForPhysical`, Tag 411.
270    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    /// Gets `ExchangeForPhysical`, Tag 411.
275    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    /// Returns true if `ExchangeForPhysical` is present, Tag 411.
283    pub fn has_exchange_for_physical(&self) -> bool {
284        self.message.body.has(tag::EXCHANGE_FOR_PHYSICAL)
285    }
286
287
288
289
290    /// Sets `ForexReq`, Tag 121.
291    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    /// Gets `ForexReq`, Tag 121.
296    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    /// Returns true if `ForexReq` is present, Tag 121.
304    pub fn has_forex_req(&self) -> bool {
305        self.message.body.has(tag::FOREX_REQ)
306    }
307
308
309
310
311    /// Sets `IncTaxInd`, Tag 416.
312    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    /// Gets `IncTaxInd`, Tag 416.
317    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    /// Returns true if `IncTaxInd` is present, Tag 416.
325    pub fn has_inc_tax_ind(&self) -> bool {
326        self.message.body.has(tag::INC_TAX_IND)
327    }
328
329
330
331
332    /// Sets `LiquidityIndType`, Tag 409.
333    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    /// Gets `LiquidityIndType`, Tag 409.
338    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    /// Returns true if `LiquidityIndType` is present, Tag 409.
346    pub fn has_liquidity_ind_type(&self) -> bool {
347        self.message.body.has(tag::LIQUIDITY_IND_TYPE)
348    }
349
350
351
352
353    /// Sets `ListName`, Tag 392.
354    pub fn set_list_name(&mut self, v: String) {
355        self.message.body.set_field(tag::LIST_NAME, FIXString::from(v));
356    }
357
358    /// Gets `ListName`, Tag 392.
359    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    /// Returns true if `ListName` is present, Tag 392.
367    pub fn has_list_name(&self) -> bool {
368        self.message.body.has(tag::LIST_NAME)
369    }
370
371
372
373
374    /// Sets `NoBidComponents`, Tag 420.
375    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    /// Gets `NoBidComponents`, Tag 420.
380    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    /// Returns true if `NoBidComponents` is present, Tag 420.
388    pub fn has_no_bid_components(&self) -> bool {
389        self.message.body.has(tag::NO_BID_COMPONENTS)
390    }
391
392
393
394
395    /// Sets `NoBidDescriptors`, Tag 398.
396    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    /// Gets `NoBidDescriptors`, Tag 398.
401    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    /// Returns true if `NoBidDescriptors` is present, Tag 398.
409    pub fn has_no_bid_descriptors(&self) -> bool {
410        self.message.body.has(tag::NO_BID_DESCRIPTORS)
411    }
412
413
414
415
416    /// Sets `NumBidders`, Tag 417.
417    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    /// Gets `NumBidders`, Tag 417.
422    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    /// Returns true if `NumBidders` is present, Tag 417.
430    pub fn has_num_bidders(&self) -> bool {
431        self.message.body.has(tag::NUM_BIDDERS)
432    }
433
434
435
436
437    /// Sets `NumTickets`, Tag 395.
438    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    /// Gets `NumTickets`, Tag 395.
443    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    /// Returns true if `NumTickets` is present, Tag 395.
451    pub fn has_num_tickets(&self) -> bool {
452        self.message.body.has(tag::NUM_TICKETS)
453    }
454
455
456
457
458    /// Sets `OutMainCntryUIndex`, Tag 412.
459    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    /// Gets `OutMainCntryUIndex`, Tag 412.
464    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    /// Returns true if `OutMainCntryUIndex` is present, Tag 412.
472    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    /// Sets `ProgPeriodInterval`, Tag 415.
480    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    /// Gets `ProgPeriodInterval`, Tag 415.
485    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    /// Returns true if `ProgPeriodInterval` is present, Tag 415.
493    pub fn has_prog_period_interval(&self) -> bool {
494        self.message.body.has(tag::PROG_PERIOD_INTERVAL)
495    }
496
497
498
499
500    /// Sets `ProgRptReqs`, Tag 414.
501    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    /// Gets `ProgRptReqs`, Tag 414.
506    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    /// Returns true if `ProgRptReqs` is present, Tag 414.
514    pub fn has_prog_rpt_reqs(&self) -> bool {
515        self.message.body.has(tag::PROG_RPT_REQS)
516    }
517
518
519
520
521    /// Sets `SideValue1`, Tag 396.
522    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    /// Gets `SideValue1`, Tag 396.
527    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    /// Returns true if `SideValue1` is present, Tag 396.
535    pub fn has_side_value1(&self) -> bool {
536        self.message.body.has(tag::SIDE_VALUE1)
537    }
538
539
540
541
542    /// Sets `SideValue2`, Tag 397.
543    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    /// Gets `SideValue2`, Tag 397.
548    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    /// Returns true if `SideValue2` is present, Tag 397.
556    pub fn has_side_value2(&self) -> bool {
557        self.message.body.has(tag::SIDE_VALUE2)
558    }
559
560
561
562
563    /// Sets `StrikeTime`, Tag 443.
564    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    /// Gets `StrikeTime`, Tag 443.
572    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    /// Returns true if `StrikeTime` is present, Tag 443.
580    pub fn has_strike_time(&self) -> bool {
581        self.message.body.has(tag::STRIKE_TIME)
582    }
583
584
585
586
587    /// Sets `Text`, Tag 58.
588    pub fn set_text(&mut self, v: String) {
589        self.message.body.set_field(tag::TEXT, FIXString::from(v));
590    }
591
592    /// Gets `Text`, Tag 58.
593    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    /// Returns true if `Text` is present, Tag 58.
601    pub fn has_text(&self) -> bool {
602        self.message.body.has(tag::TEXT)
603    }
604
605
606
607
608    /// Sets `TotNoRelatedSym`, Tag 393.
609    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    /// Gets `TotNoRelatedSym`, Tag 393.
614    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    /// Returns true if `TotNoRelatedSym` is present, Tag 393.
622    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    /// Sets `TradeDate`, Tag 75.
630    pub fn set_trade_date(&mut self, v: String) {
631        self.message.body.set_field(tag::TRADE_DATE, FIXString::from(v));
632    }
633
634    /// Gets `TradeDate`, Tag 75.
635    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    /// Returns true if `TradeDate` is present, Tag 75.
643    pub fn has_trade_date(&self) -> bool {
644        self.message.body.has(tag::TRADE_DATE)
645    }
646
647
648
649
650    /// Sets `WtAverageLiquidity`, Tag 410.
651    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    /// Gets `WtAverageLiquidity`, Tag 410.
656    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    /// Returns true if `WtAverageLiquidity` is present, Tag 410.
664    pub fn has_wt_average_liquidity(&self) -> bool {
665        self.message.body.has(tag::WT_AVERAGE_LIQUIDITY)
666    }
667
668
669}
670
671/// `RouteOut` is the callback type for routing `BidRequest` messages.
672pub type RouteOut = fn(msg: BidRequest, session_id: SessionID) -> Result<(), MessageRejectErrorEnum>;
673
674/// Route type returned by the `route` function.
675pub type Route = (&'static str, &'static str, Box<dyn Fn(&Message, SessionID) -> Result<(), MessageRejectErrorEnum> + Send>);
676
677/// Returns the begin string, message type, and route function for `BidRequest`.
678pub 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    ("7", "k", Box::new(r))
683}