1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
9#[serde(rename_all = "UPPERCASE")]
10pub enum AssetCategory {
11 #[serde(rename = "STK")]
13 Stock,
14
15 #[serde(rename = "OPT")]
17 Option,
18
19 #[serde(rename = "FUT")]
21 Future,
22
23 #[serde(rename = "FOP")]
25 FutureOption,
26
27 #[serde(rename = "CASH")]
29 Cash,
30
31 #[serde(rename = "BOND")]
33 Bond,
34
35 #[serde(rename = "BILL")]
37 Bill,
38
39 #[serde(rename = "CMDTY")]
41 Commodity,
42
43 #[serde(rename = "CFD")]
45 Cfd,
46
47 #[serde(rename = "FXCFD")]
49 ForexCfd,
50
51 #[serde(rename = "WAR")]
53 Warrant,
54
55 #[serde(rename = "FUND")]
57 Fund,
58
59 #[serde(rename = "IOPT")]
61 StructuredProduct,
62
63 #[serde(rename = "BAG")]
65 Bag,
66
67 #[serde(rename = "CRYPTO")]
69 Cryptocurrency,
70
71 #[serde(rename = "METAL")]
73 Metal,
74
75 #[serde(rename = "EFP")]
77 ExchangeForPhysical,
78
79 #[serde(rename = "EC")]
81 EventContract,
82
83 #[serde(rename = "IND")]
85 Index,
86
87 #[serde(other)]
89 Unknown,
90}
91
92#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
94#[serde(rename_all = "UPPERCASE")]
95pub enum BuySell {
96 #[serde(rename = "BUY")]
98 Buy,
99
100 #[serde(rename = "SELL")]
102 Sell,
103
104 #[serde(rename = "BUY (Ca.)")]
106 CancelBuy,
107
108 #[serde(rename = "SELL (Ca.)")]
110 CancelSell,
111
112 #[serde(other)]
114 Unknown,
115}
116
117#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
119pub enum OpenClose {
120 #[serde(rename = "O")]
122 Open,
123
124 #[serde(rename = "C")]
126 Close,
127
128 #[serde(rename = "C;O")]
130 CloseOpen,
131
132 #[serde(other)]
134 Unknown,
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
139#[serde(rename_all = "UPPERCASE")]
140pub enum OrderType {
141 #[serde(rename = "MKT")]
143 Market,
144
145 #[serde(rename = "LMT")]
147 Limit,
148
149 #[serde(rename = "STP")]
151 Stop,
152
153 #[serde(rename = "STP LMT")]
155 StopLimit,
156
157 #[serde(rename = "MOC")]
159 MarketOnClose,
160
161 #[serde(rename = "LOC")]
163 LimitOnClose,
164
165 #[serde(rename = "MIT")]
167 MarketIfTouched,
168
169 #[serde(rename = "LIT")]
171 LimitIfTouched,
172
173 #[serde(rename = "TRAIL")]
175 TrailingStop,
176
177 #[serde(rename = "TRAIL LMT")]
179 TrailingLimit,
180
181 #[serde(rename = "MIDPX")]
183 MidPrice,
184
185 #[serde(rename = "REL")]
187 Relative,
188
189 #[serde(rename = "MULTIPLE")]
191 Multiple,
192
193 #[serde(other)]
195 Unknown,
196}
197
198#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
200pub enum PutCall {
201 #[serde(rename = "P")]
203 Put,
204
205 #[serde(rename = "C")]
207 Call,
208
209 #[serde(other)]
211 Unknown,
212}
213
214#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
216pub enum LongShort {
217 Long,
219
220 Short,
222
223 #[serde(other)]
225 Unknown,
226}
227
228#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
230pub enum TradeType {
231 ExchTrade,
233
234 BookTrade,
236
237 DvpTrade,
239
240 FracShare,
242
243 FracShareCancel,
245
246 Adjustment,
248
249 TradeCorrect,
251
252 TradeCancel,
254
255 IBKRTrade,
257
258 #[serde(other)]
260 Unknown,
261}
262
263#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
265pub enum CashAction {
266 #[serde(rename = "Deposits & Withdrawals")]
268 DepositsWithdrawals,
269
270 Dividends,
272
273 WithholdingTax,
275
276 #[serde(rename = "Broker Interest Paid")]
278 BrokerInterestPaid,
279
280 #[serde(rename = "Broker Interest Received")]
282 BrokerInterestReceived,
283
284 #[serde(rename = "Bond Interest Received")]
286 BondInterestReceived,
287
288 #[serde(rename = "Bond Interest Paid")]
290 BondInterestPaid,
291
292 #[serde(rename = "Bond Interest")]
294 BondInterest,
295
296 #[serde(rename = "Payment In Lieu Of Dividends")]
298 PaymentInLieuOfDividends,
299
300 #[serde(rename = "Other Fees")]
302 OtherFees,
303
304 #[serde(rename = "Commission Adjustments")]
306 CommissionAdjustments,
307
308 #[serde(rename = "Advisor Fees")]
310 AdvisorFees,
311
312 #[serde(rename = "Cash Receipts")]
314 CashReceipts,
315
316 Fees,
318
319 #[serde(other)]
321 Unknown,
322}
323
324#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
326pub enum Reorg {
327 #[serde(rename = "Stock Split")]
329 StockSplit,
330
331 #[serde(rename = "Forward Split (Issue)")]
333 ForwardSplitIssue,
334
335 #[serde(rename = "Forward Split")]
337 ForwardSplit,
338
339 #[serde(rename = "Reverse Split")]
341 ReverseSplit,
342
343 Merger,
345
346 Spinoff,
348
349 #[serde(rename = "Contract Spinoff")]
351 ContractSpinoff,
352
353 #[serde(rename = "Stock Dividend")]
355 StockDividend,
356
357 #[serde(rename = "Cash Dividend")]
359 CashDividend,
360
361 #[serde(rename = "Choice Dividend")]
363 ChoiceDividend,
364
365 #[serde(rename = "Choice Dividend (Delivery)")]
367 ChoiceDivDelivery,
368
369 #[serde(rename = "Choice Dividend (Issue)")]
371 ChoiceDivIssue,
372
373 #[serde(rename = "Dividend Rights Issue")]
375 DivRightsIssue,
376
377 #[serde(rename = "Expired Dividend Right")]
379 ExpiredDivRight,
380
381 Delisted,
383
384 #[serde(rename = "Delist (Worthless)")]
386 DelistWorthless,
387
388 #[serde(rename = "Name Change")]
390 NameChange,
391
392 #[serde(rename = "Symbol Change")]
394 SymbolChange,
395
396 #[serde(rename = "Issue Change")]
398 IssueChange,
399
400 #[serde(rename = "Bond Conversion")]
402 BondConversion,
403
404 #[serde(rename = "Bond Maturity")]
406 BondMaturity,
407
408 #[serde(rename = "T-Bill Maturity")]
410 TBillMaturity,
411
412 #[serde(rename = "Convertible Issue")]
414 ConvertibleIssue,
415
416 #[serde(rename = "Coupon Payment")]
418 CouponPayment,
419
420 #[serde(rename = "Contract Consolidation")]
422 ContractConsolidation,
423
424 #[serde(rename = "Contract Split")]
426 ContractSplit,
427
428 #[serde(rename = "CFD Termination")]
430 CfdTermination,
431
432 #[serde(rename = "Fee Allocation")]
434 FeeAllocation,
435
436 #[serde(rename = "Rights Issue")]
438 RightsIssue,
439
440 #[serde(rename = "Subscribe Rights")]
442 SubscribeRights,
443
444 Tender,
446
447 #[serde(rename = "Tender (Issue)")]
449 TenderIssue,
450
451 #[serde(rename = "Proxy Vote")]
453 ProxyVote,
454
455 #[serde(rename = "Generic Voluntary")]
457 GenericVoluntary,
458
459 #[serde(rename = "Asset Purchase")]
461 AssetPurchase,
462
463 #[serde(rename = "Purchase (Issue)")]
465 PurchaseIssue,
466
467 #[serde(other)]
469 Unknown,
470}
471
472#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
474pub enum OptionAction {
475 Assignment,
477
478 Exercise,
480
481 Expiration,
483
484 Expire,
486
487 #[serde(rename = "Cash Settlement")]
489 CashSettlement,
490
491 Buy,
493
494 Sell,
496
497 #[serde(other)]
499 Unknown,
500}
501
502#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
504pub enum TransferType {
505 ACATS,
507
508 ATON,
510
511 FOP,
513
514 INTERNAL,
516
517 DVP,
519
520 #[serde(other)]
522 Unknown,
523}
524
525#[derive(Debug, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
529pub enum Code {
530 A,
532
533 Adj,
535
536 Al,
538
539 Ae,
541
542 Af,
544
545 Aw,
547
548 B,
550
551 Bo,
553
554 Ca,
556
557 C,
559
560 Cd,
562
563 Cp,
565
566 Cr,
568
569 Cs,
571
572 D,
574
575 Et,
577
578 Ex,
580
581 O,
583
584 G,
586
587 Hc,
589
590 Hi,
592
593 Hr,
595
596 I,
598
599 Ia,
601
602 Iv,
604
605 L,
607
608 Li,
610
611 Ln,
613
614 Lt,
616
617 M,
619
620 Ml,
622
623 Mn,
625
626 Ms,
628
629 Mi,
631
632 Mx,
634
635 P,
637
638 Pt,
640
641 Fr,
643
644 Fp,
646
647 Pi,
649
650 Pa,
652
653 Pr,
655
656 Re,
658
659 Rd,
661
662 R,
664
665 Rv,
667
668 Ri,
670
671 Si,
673
674 Sp,
676
677 So,
679
680 Ss,
682
683 St,
685
686 Sy,
688
689 T,
691
692 W,
694
695 #[serde(other)]
697 Unknown,
698}
699
700#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
702pub enum ToFrom {
703 To,
705
706 From,
708
709 #[serde(other)]
711 Unknown,
712}
713
714#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
716pub enum InOut {
717 IN,
719
720 OUT,
722
723 #[serde(other)]
725 Unknown,
726}
727
728#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Deserialize, Serialize)]
730pub enum DeliveredReceived {
731 Delivered,
733
734 Received,
736
737 #[serde(other)]
739 Unknown,
740}
741
742#[cfg(test)]
743mod tests {
744 use super::*;
745
746 #[test]
747 fn test_asset_category_basic() {
748 let stock = AssetCategory::Stock;
750 assert_eq!(stock, AssetCategory::Stock);
751 assert_ne!(stock, AssetCategory::Option);
752 }
753
754 #[test]
755 fn test_buy_sell_basic() {
756 let buy = BuySell::Buy;
758 assert_eq!(buy, BuySell::Buy);
759 assert_ne!(buy, BuySell::Sell);
760 }
761
762 #[test]
763 fn test_open_close_basic() {
764 let open = OpenClose::Open;
765 assert_eq!(open, OpenClose::Open);
766 assert_ne!(open, OpenClose::Close);
767 }
768
769 #[test]
770 fn test_put_call_basic() {
771 let call = PutCall::Call;
772 assert_eq!(call, PutCall::Call);
773 assert_ne!(call, PutCall::Put);
774 }
775}