oanda-client 1.1.0

An async, provider-native Rust client for OANDA's v20 REST API
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
//! Round-trip every scalar enum value listed on OANDA's definition pages.
#![allow(
    clippy::expect_used,
    clippy::unwrap_used,
    clippy::panic,
    clippy::too_many_lines,
    clippy::needless_pass_by_value
)]
use oanda_client::models;
use serde::{Serialize, de::DeserializeOwned};
use std::fmt::Debug;
fn round_trip<T: Serialize + DeserializeOwned + Debug + PartialEq>(wire: &str, expected: T) {
    let decoded: T = serde_json::from_value(serde_json::Value::String(wire.to_owned()))
        .expect("decode documented enum");
    assert_eq!(
        decoded, expected,
        "{wire:?} must decode to its documented variant, not to the Unknown arm"
    );
    let encoded = serde_json::to_value(decoded).expect("encode documented enum");
    assert_eq!(encoded, serde_json::Value::String(wire.to_owned()));
}
#[test]
fn all_documented_scalar_enum_variants_round_trip() {
    round_trip::<models::GuaranteedStopLossOrderMode>(
        "DISABLED",
        models::GuaranteedStopLossOrderMode::Disabled,
    );
    round_trip::<models::GuaranteedStopLossOrderMode>(
        "ALLOWED",
        models::GuaranteedStopLossOrderMode::Allowed,
    );
    round_trip::<models::GuaranteedStopLossOrderMode>(
        "REQUIRED",
        models::GuaranteedStopLossOrderMode::Required,
    );
    round_trip::<models::GuaranteedStopLossOrderMutability>(
        "FIXED",
        models::GuaranteedStopLossOrderMutability::Fixed,
    );
    round_trip::<models::GuaranteedStopLossOrderMutability>(
        "REPLACEABLE",
        models::GuaranteedStopLossOrderMutability::Replaceable,
    );
    round_trip::<models::GuaranteedStopLossOrderMutability>(
        "CANCELABLE",
        models::GuaranteedStopLossOrderMutability::Cancelable,
    );
    round_trip::<models::GuaranteedStopLossOrderMutability>(
        "PRICE_WIDEN_ONLY",
        models::GuaranteedStopLossOrderMutability::PriceWidenOnly,
    );
    round_trip::<models::AccountFinancingMode>(
        "NO_FINANCING",
        models::AccountFinancingMode::NoFinancing,
    );
    round_trip::<models::AccountFinancingMode>(
        "SECOND_BY_SECOND",
        models::AccountFinancingMode::SecondBySecond,
    );
    round_trip::<models::AccountFinancingMode>("DAILY", models::AccountFinancingMode::Daily);
    round_trip::<models::PositionAggregationMode>(
        "ABSOLUTE_SUM",
        models::PositionAggregationMode::AbsoluteSum,
    );
    round_trip::<models::PositionAggregationMode>(
        "MAXIMAL_SIDE",
        models::PositionAggregationMode::MaximalSide,
    );
    round_trip::<models::PositionAggregationMode>(
        "NET_SUM",
        models::PositionAggregationMode::NetSum,
    );
    round_trip::<models::CandlestickGranularity>("S5", models::CandlestickGranularity::S5);
    round_trip::<models::CandlestickGranularity>("S10", models::CandlestickGranularity::S10);
    round_trip::<models::CandlestickGranularity>("S15", models::CandlestickGranularity::S15);
    round_trip::<models::CandlestickGranularity>("S30", models::CandlestickGranularity::S30);
    round_trip::<models::CandlestickGranularity>("M1", models::CandlestickGranularity::M1);
    round_trip::<models::CandlestickGranularity>("M2", models::CandlestickGranularity::M2);
    round_trip::<models::CandlestickGranularity>("M4", models::CandlestickGranularity::M4);
    round_trip::<models::CandlestickGranularity>("M5", models::CandlestickGranularity::M5);
    round_trip::<models::CandlestickGranularity>("M10", models::CandlestickGranularity::M10);
    round_trip::<models::CandlestickGranularity>("M15", models::CandlestickGranularity::M15);
    round_trip::<models::CandlestickGranularity>("M30", models::CandlestickGranularity::M30);
    round_trip::<models::CandlestickGranularity>("H1", models::CandlestickGranularity::H1);
    round_trip::<models::CandlestickGranularity>("H2", models::CandlestickGranularity::H2);
    round_trip::<models::CandlestickGranularity>("H3", models::CandlestickGranularity::H3);
    round_trip::<models::CandlestickGranularity>("H4", models::CandlestickGranularity::H4);
    round_trip::<models::CandlestickGranularity>("H6", models::CandlestickGranularity::H6);
    round_trip::<models::CandlestickGranularity>("H8", models::CandlestickGranularity::H8);
    round_trip::<models::CandlestickGranularity>("H12", models::CandlestickGranularity::H12);
    round_trip::<models::CandlestickGranularity>("D", models::CandlestickGranularity::D);
    round_trip::<models::CandlestickGranularity>("W", models::CandlestickGranularity::W);
    round_trip::<models::CandlestickGranularity>("M", models::CandlestickGranularity::M);
    round_trip::<models::WeeklyAlignment>("Monday", models::WeeklyAlignment::Monday);
    round_trip::<models::WeeklyAlignment>("Tuesday", models::WeeklyAlignment::Tuesday);
    round_trip::<models::WeeklyAlignment>("Wednesday", models::WeeklyAlignment::Wednesday);
    round_trip::<models::WeeklyAlignment>("Thursday", models::WeeklyAlignment::Thursday);
    round_trip::<models::WeeklyAlignment>("Friday", models::WeeklyAlignment::Friday);
    round_trip::<models::WeeklyAlignment>("Saturday", models::WeeklyAlignment::Saturday);
    round_trip::<models::WeeklyAlignment>("Sunday", models::WeeklyAlignment::Sunday);
    round_trip::<models::OrderType>("MARKET", models::OrderType::Market);
    round_trip::<models::OrderType>("LIMIT", models::OrderType::Limit);
    round_trip::<models::OrderType>("STOP", models::OrderType::Stop);
    round_trip::<models::OrderType>("MARKET_IF_TOUCHED", models::OrderType::MarketIfTouched);
    round_trip::<models::OrderType>("TAKE_PROFIT", models::OrderType::TakeProfit);
    round_trip::<models::OrderType>("STOP_LOSS", models::OrderType::StopLoss);
    round_trip::<models::OrderType>(
        "GUARANTEED_STOP_LOSS",
        models::OrderType::GuaranteedStopLoss,
    );
    round_trip::<models::OrderType>("TRAILING_STOP_LOSS", models::OrderType::TrailingStopLoss);
    round_trip::<models::OrderType>("FIXED_PRICE", models::OrderType::FixedPrice);
    round_trip::<models::CancellableOrderType>("LIMIT", models::CancellableOrderType::Limit);
    round_trip::<models::CancellableOrderType>("STOP", models::CancellableOrderType::Stop);
    round_trip::<models::CancellableOrderType>(
        "MARKET_IF_TOUCHED",
        models::CancellableOrderType::MarketIfTouched,
    );
    round_trip::<models::CancellableOrderType>(
        "TAKE_PROFIT",
        models::CancellableOrderType::TakeProfit,
    );
    round_trip::<models::CancellableOrderType>("STOP_LOSS", models::CancellableOrderType::StopLoss);
    round_trip::<models::CancellableOrderType>(
        "GUARANTEED_STOP_LOSS",
        models::CancellableOrderType::GuaranteedStopLoss,
    );
    round_trip::<models::CancellableOrderType>(
        "TRAILING_STOP_LOSS",
        models::CancellableOrderType::TrailingStopLoss,
    );
    round_trip::<models::OrderState>("PENDING", models::OrderState::Pending);
    round_trip::<models::OrderState>("FILLED", models::OrderState::Filled);
    round_trip::<models::OrderState>("TRIGGERED", models::OrderState::Triggered);
    round_trip::<models::OrderState>("CANCELLED", models::OrderState::Cancelled);
    round_trip::<models::OrderStateFilter>("PENDING", models::OrderStateFilter::Pending);
    round_trip::<models::OrderStateFilter>("FILLED", models::OrderStateFilter::Filled);
    round_trip::<models::OrderStateFilter>("TRIGGERED", models::OrderStateFilter::Triggered);
    round_trip::<models::OrderStateFilter>("CANCELLED", models::OrderStateFilter::Cancelled);
    round_trip::<models::OrderStateFilter>("ALL", models::OrderStateFilter::All);
    round_trip::<models::TimeInForce>("GTC", models::TimeInForce::Gtc);
    round_trip::<models::TimeInForce>("GTD", models::TimeInForce::Gtd);
    round_trip::<models::TimeInForce>("GFD", models::TimeInForce::Gfd);
    round_trip::<models::TimeInForce>("FOK", models::TimeInForce::Fok);
    round_trip::<models::TimeInForce>("IOC", models::TimeInForce::Ioc);
    round_trip::<models::OrderPositionFill>("OPEN_ONLY", models::OrderPositionFill::OpenOnly);
    round_trip::<models::OrderPositionFill>("REDUCE_FIRST", models::OrderPositionFill::ReduceFirst);
    round_trip::<models::OrderPositionFill>("REDUCE_ONLY", models::OrderPositionFill::ReduceOnly);
    round_trip::<models::OrderPositionFill>("DEFAULT", models::OrderPositionFill::Default);
    round_trip::<models::OrderTriggerCondition>("DEFAULT", models::OrderTriggerCondition::Default);
    round_trip::<models::OrderTriggerCondition>("INVERSE", models::OrderTriggerCondition::Inverse);
    round_trip::<models::OrderTriggerCondition>("BID", models::OrderTriggerCondition::Bid);
    round_trip::<models::OrderTriggerCondition>("ASK", models::OrderTriggerCondition::Ask);
    round_trip::<models::OrderTriggerCondition>("MID", models::OrderTriggerCondition::Mid);
    round_trip::<models::TradeState>("OPEN", models::TradeState::Open);
    round_trip::<models::TradeState>("CLOSED", models::TradeState::Closed);
    round_trip::<models::TradeState>(
        "CLOSE_WHEN_TRADEABLE",
        models::TradeState::CloseWhenTradeable,
    );
    round_trip::<models::TradeStateFilter>("OPEN", models::TradeStateFilter::Open);
    round_trip::<models::TradeStateFilter>("CLOSED", models::TradeStateFilter::Closed);
    round_trip::<models::TradeStateFilter>(
        "CLOSE_WHEN_TRADEABLE",
        models::TradeStateFilter::CloseWhenTradeable,
    );
    round_trip::<models::TradeStateFilter>("ALL", models::TradeStateFilter::All);
    round_trip::<models::TradePL>("POSITIVE", models::TradePL::Positive);
    round_trip::<models::TradePL>("NEGATIVE", models::TradePL::Negative);
    round_trip::<models::TradePL>("ZERO", models::TradePL::Zero);
    round_trip::<models::TransactionType>("CREATE", models::TransactionType::Create);
    round_trip::<models::TransactionType>("CLOSE", models::TransactionType::Close);
    round_trip::<models::TransactionType>("REOPEN", models::TransactionType::Reopen);
    round_trip::<models::TransactionType>(
        "CLIENT_CONFIGURE",
        models::TransactionType::ClientConfigure,
    );
    round_trip::<models::TransactionType>(
        "CLIENT_CONFIGURE_REJECT",
        models::TransactionType::ClientConfigureReject,
    );
    round_trip::<models::TransactionType>("TRANSFER_FUNDS", models::TransactionType::TransferFunds);
    round_trip::<models::TransactionType>(
        "TRANSFER_FUNDS_REJECT",
        models::TransactionType::TransferFundsReject,
    );
    round_trip::<models::TransactionType>("MARKET_ORDER", models::TransactionType::MarketOrder);
    round_trip::<models::TransactionType>(
        "MARKET_ORDER_REJECT",
        models::TransactionType::MarketOrderReject,
    );
    round_trip::<models::TransactionType>(
        "FIXED_PRICE_ORDER",
        models::TransactionType::FixedPriceOrder,
    );
    round_trip::<models::TransactionType>("LIMIT_ORDER", models::TransactionType::LimitOrder);
    round_trip::<models::TransactionType>(
        "LIMIT_ORDER_REJECT",
        models::TransactionType::LimitOrderReject,
    );
    round_trip::<models::TransactionType>("STOP_ORDER", models::TransactionType::StopOrder);
    round_trip::<models::TransactionType>(
        "STOP_ORDER_REJECT",
        models::TransactionType::StopOrderReject,
    );
    round_trip::<models::TransactionType>(
        "MARKET_IF_TOUCHED_ORDER",
        models::TransactionType::MarketIfTouchedOrder,
    );
    round_trip::<models::TransactionType>(
        "MARKET_IF_TOUCHED_ORDER_REJECT",
        models::TransactionType::MarketIfTouchedOrderReject,
    );
    round_trip::<models::TransactionType>(
        "TAKE_PROFIT_ORDER",
        models::TransactionType::TakeProfitOrder,
    );
    round_trip::<models::TransactionType>(
        "TAKE_PROFIT_ORDER_REJECT",
        models::TransactionType::TakeProfitOrderReject,
    );
    round_trip::<models::TransactionType>(
        "STOP_LOSS_ORDER",
        models::TransactionType::StopLossOrder,
    );
    round_trip::<models::TransactionType>(
        "STOP_LOSS_ORDER_REJECT",
        models::TransactionType::StopLossOrderReject,
    );
    round_trip::<models::TransactionType>(
        "GUARANTEED_STOP_LOSS_ORDER",
        models::TransactionType::GuaranteedStopLossOrder,
    );
    round_trip::<models::TransactionType>(
        "GUARANTEED_STOP_LOSS_ORDER_REJECT",
        models::TransactionType::GuaranteedStopLossOrderReject,
    );
    round_trip::<models::TransactionType>(
        "TRAILING_STOP_LOSS_ORDER",
        models::TransactionType::TrailingStopLossOrder,
    );
    round_trip::<models::TransactionType>(
        "TRAILING_STOP_LOSS_ORDER_REJECT",
        models::TransactionType::TrailingStopLossOrderReject,
    );
    round_trip::<models::TransactionType>("ORDER_FILL", models::TransactionType::OrderFill);
    round_trip::<models::TransactionType>("ORDER_CANCEL", models::TransactionType::OrderCancel);
    round_trip::<models::TransactionType>(
        "ORDER_CANCEL_REJECT",
        models::TransactionType::OrderCancelReject,
    );
    round_trip::<models::TransactionType>(
        "ORDER_CLIENT_EXTENSIONS_MODIFY",
        models::TransactionType::OrderClientExtensionsModify,
    );
    round_trip::<models::TransactionType>(
        "ORDER_CLIENT_EXTENSIONS_MODIFY_REJECT",
        models::TransactionType::OrderClientExtensionsModifyReject,
    );
    round_trip::<models::TransactionType>(
        "TRADE_CLIENT_EXTENSIONS_MODIFY",
        models::TransactionType::TradeClientExtensionsModify,
    );
    round_trip::<models::TransactionType>(
        "TRADE_CLIENT_EXTENSIONS_MODIFY_REJECT",
        models::TransactionType::TradeClientExtensionsModifyReject,
    );
    round_trip::<models::TransactionType>(
        "MARGIN_CALL_ENTER",
        models::TransactionType::MarginCallEnter,
    );
    round_trip::<models::TransactionType>(
        "MARGIN_CALL_EXTEND",
        models::TransactionType::MarginCallExtend,
    );
    round_trip::<models::TransactionType>(
        "MARGIN_CALL_EXIT",
        models::TransactionType::MarginCallExit,
    );
    round_trip::<models::TransactionType>(
        "DELAYED_TRADE_CLOSURE",
        models::TransactionType::DelayedTradeClosure,
    );
    round_trip::<models::TransactionType>(
        "DAILY_FINANCING",
        models::TransactionType::DailyFinancing,
    );
    round_trip::<models::TransactionType>(
        "DIVIDEND_ADJUSTMENT",
        models::TransactionType::DividendAdjustment,
    );
    round_trip::<models::TransactionType>(
        "RESET_RESETTABLE_PL",
        models::TransactionType::ResetResettablePl,
    );
    round_trip::<models::FundingReason>("CLIENT_FUNDING", models::FundingReason::ClientFunding);
    round_trip::<models::FundingReason>("ACCOUNT_TRANSFER", models::FundingReason::AccountTransfer);
    round_trip::<models::FundingReason>(
        "DIVISION_MIGRATION",
        models::FundingReason::DivisionMigration,
    );
    round_trip::<models::FundingReason>("SITE_MIGRATION", models::FundingReason::SiteMigration);
    round_trip::<models::FundingReason>("ADJUSTMENT", models::FundingReason::Adjustment);
    round_trip::<models::MarketOrderReason>("CLIENT_ORDER", models::MarketOrderReason::ClientOrder);
    round_trip::<models::MarketOrderReason>("TRADE_CLOSE", models::MarketOrderReason::TradeClose);
    round_trip::<models::MarketOrderReason>(
        "POSITION_CLOSEOUT",
        models::MarketOrderReason::PositionCloseout,
    );
    round_trip::<models::MarketOrderReason>(
        "MARGIN_CLOSEOUT",
        models::MarketOrderReason::MarginCloseout,
    );
    round_trip::<models::MarketOrderReason>(
        "DELAYED_TRADE_CLOSE",
        models::MarketOrderReason::DelayedTradeClose,
    );
    round_trip::<models::FixedPriceOrderReason>(
        "PLATFORM_ACCOUNT_MIGRATION",
        models::FixedPriceOrderReason::PlatformAccountMigration,
    );
    round_trip::<models::FixedPriceOrderReason>(
        "TRADE_CLOSE_DIVISION_ACCOUNT_MIGRATION",
        models::FixedPriceOrderReason::TradeCloseDivisionAccountMigration,
    );
    round_trip::<models::FixedPriceOrderReason>(
        "TRADE_CLOSE_ADMINISTRATIVE_ACTION",
        models::FixedPriceOrderReason::TradeCloseAdministrativeAction,
    );
    round_trip::<models::LimitOrderReason>("CLIENT_ORDER", models::LimitOrderReason::ClientOrder);
    round_trip::<models::LimitOrderReason>("REPLACEMENT", models::LimitOrderReason::Replacement);
    round_trip::<models::StopOrderReason>("CLIENT_ORDER", models::StopOrderReason::ClientOrder);
    round_trip::<models::StopOrderReason>("REPLACEMENT", models::StopOrderReason::Replacement);
    round_trip::<models::MarketIfTouchedOrderReason>(
        "CLIENT_ORDER",
        models::MarketIfTouchedOrderReason::ClientOrder,
    );
    round_trip::<models::MarketIfTouchedOrderReason>(
        "REPLACEMENT",
        models::MarketIfTouchedOrderReason::Replacement,
    );
    round_trip::<models::TakeProfitOrderReason>(
        "CLIENT_ORDER",
        models::TakeProfitOrderReason::ClientOrder,
    );
    round_trip::<models::TakeProfitOrderReason>(
        "REPLACEMENT",
        models::TakeProfitOrderReason::Replacement,
    );
    round_trip::<models::TakeProfitOrderReason>("ON_FILL", models::TakeProfitOrderReason::OnFill);
    round_trip::<models::StopLossOrderReason>(
        "CLIENT_ORDER",
        models::StopLossOrderReason::ClientOrder,
    );
    round_trip::<models::StopLossOrderReason>(
        "REPLACEMENT",
        models::StopLossOrderReason::Replacement,
    );
    round_trip::<models::StopLossOrderReason>("ON_FILL", models::StopLossOrderReason::OnFill);
    round_trip::<models::GuaranteedStopLossOrderReason>(
        "CLIENT_ORDER",
        models::GuaranteedStopLossOrderReason::ClientOrder,
    );
    round_trip::<models::GuaranteedStopLossOrderReason>(
        "REPLACEMENT",
        models::GuaranteedStopLossOrderReason::Replacement,
    );
    round_trip::<models::GuaranteedStopLossOrderReason>(
        "ON_FILL",
        models::GuaranteedStopLossOrderReason::OnFill,
    );
    round_trip::<models::TrailingStopLossOrderReason>(
        "CLIENT_ORDER",
        models::TrailingStopLossOrderReason::ClientOrder,
    );
    round_trip::<models::TrailingStopLossOrderReason>(
        "REPLACEMENT",
        models::TrailingStopLossOrderReason::Replacement,
    );
    round_trip::<models::TrailingStopLossOrderReason>(
        "ON_FILL",
        models::TrailingStopLossOrderReason::OnFill,
    );
    round_trip::<models::OrderFillReason>("LIMIT_ORDER", models::OrderFillReason::LimitOrder);
    round_trip::<models::OrderFillReason>("STOP_ORDER", models::OrderFillReason::StopOrder);
    round_trip::<models::OrderFillReason>(
        "MARKET_IF_TOUCHED_ORDER",
        models::OrderFillReason::MarketIfTouchedOrder,
    );
    round_trip::<models::OrderFillReason>(
        "TAKE_PROFIT_ORDER",
        models::OrderFillReason::TakeProfitOrder,
    );
    round_trip::<models::OrderFillReason>(
        "STOP_LOSS_ORDER",
        models::OrderFillReason::StopLossOrder,
    );
    round_trip::<models::OrderFillReason>(
        "GUARANTEED_STOP_LOSS_ORDER",
        models::OrderFillReason::GuaranteedStopLossOrder,
    );
    round_trip::<models::OrderFillReason>(
        "TRAILING_STOP_LOSS_ORDER",
        models::OrderFillReason::TrailingStopLossOrder,
    );
    round_trip::<models::OrderFillReason>("MARKET_ORDER", models::OrderFillReason::MarketOrder);
    round_trip::<models::OrderFillReason>(
        "MARKET_ORDER_TRADE_CLOSE",
        models::OrderFillReason::MarketOrderTradeClose,
    );
    round_trip::<models::OrderFillReason>(
        "MARKET_ORDER_POSITION_CLOSEOUT",
        models::OrderFillReason::MarketOrderPositionCloseout,
    );
    round_trip::<models::OrderFillReason>(
        "MARKET_ORDER_MARGIN_CLOSEOUT",
        models::OrderFillReason::MarketOrderMarginCloseout,
    );
    round_trip::<models::OrderFillReason>(
        "MARKET_ORDER_DELAYED_TRADE_CLOSE",
        models::OrderFillReason::MarketOrderDelayedTradeClose,
    );
    round_trip::<models::OrderFillReason>(
        "FIXED_PRICE_ORDER",
        models::OrderFillReason::FixedPriceOrder,
    );
    round_trip::<models::OrderFillReason>(
        "FIXED_PRICE_ORDER_PLATFORM_ACCOUNT_MIGRATION",
        models::OrderFillReason::FixedPriceOrderPlatformAccountMigration,
    );
    round_trip::<models::OrderFillReason>(
        "FIXED_PRICE_ORDER_DIVISION_ACCOUNT_MIGRATION",
        models::OrderFillReason::FixedPriceOrderDivisionAccountMigration,
    );
    round_trip::<models::OrderFillReason>(
        "FIXED_PRICE_ORDER_ADMINISTRATIVE_ACTION",
        models::OrderFillReason::FixedPriceOrderAdministrativeAction,
    );
    round_trip::<models::OrderCancelReason>(
        "INTERNAL_SERVER_ERROR",
        models::OrderCancelReason::InternalServerError,
    );
    round_trip::<models::OrderCancelReason>(
        "ACCOUNT_LOCKED",
        models::OrderCancelReason::AccountLocked,
    );
    round_trip::<models::OrderCancelReason>(
        "ACCOUNT_NEW_POSITIONS_LOCKED",
        models::OrderCancelReason::AccountNewPositionsLocked,
    );
    round_trip::<models::OrderCancelReason>(
        "ACCOUNT_ORDER_CREATION_LOCKED",
        models::OrderCancelReason::AccountOrderCreationLocked,
    );
    round_trip::<models::OrderCancelReason>(
        "ACCOUNT_ORDER_FILL_LOCKED",
        models::OrderCancelReason::AccountOrderFillLocked,
    );
    round_trip::<models::OrderCancelReason>(
        "CLIENT_REQUEST",
        models::OrderCancelReason::ClientRequest,
    );
    round_trip::<models::OrderCancelReason>("MIGRATION", models::OrderCancelReason::Migration);
    round_trip::<models::OrderCancelReason>(
        "MARKET_HALTED",
        models::OrderCancelReason::MarketHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "LINKED_TRADE_CLOSED",
        models::OrderCancelReason::LinkedTradeClosed,
    );
    round_trip::<models::OrderCancelReason>(
        "TIME_IN_FORCE_EXPIRED",
        models::OrderCancelReason::TimeInForceExpired,
    );
    round_trip::<models::OrderCancelReason>(
        "INSUFFICIENT_MARGIN",
        models::OrderCancelReason::InsufficientMargin,
    );
    round_trip::<models::OrderCancelReason>(
        "FIFO_VIOLATION",
        models::OrderCancelReason::FifoViolation,
    );
    round_trip::<models::OrderCancelReason>(
        "BOUNDS_VIOLATION",
        models::OrderCancelReason::BoundsViolation,
    );
    round_trip::<models::OrderCancelReason>(
        "CLIENT_REQUEST_REPLACED",
        models::OrderCancelReason::ClientRequestReplaced,
    );
    round_trip::<models::OrderCancelReason>(
        "DIVIDEND_ADJUSTMENT_REPLACED",
        models::OrderCancelReason::DividendAdjustmentReplaced,
    );
    round_trip::<models::OrderCancelReason>(
        "INSUFFICIENT_LIQUIDITY",
        models::OrderCancelReason::InsufficientLiquidity,
    );
    round_trip::<models::OrderCancelReason>(
        "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::OrderCancelReason::TakeProfitOnFillGtdTimestampInPast,
    );
    round_trip::<models::OrderCancelReason>(
        "TAKE_PROFIT_ON_FILL_LOSS",
        models::OrderCancelReason::TakeProfitOnFillLoss,
    );
    round_trip::<models::OrderCancelReason>(
        "LOSING_TAKE_PROFIT",
        models::OrderCancelReason::LosingTakeProfit,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::OrderCancelReason::StopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_LOSS",
        models::OrderCancelReason::StopLossOnFillLoss,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::OrderCancelReason::StopLossOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_REQUIRED",
        models::OrderCancelReason::StopLossOnFillRequired,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_REQUIRED",
        models::OrderCancelReason::StopLossOnFillGuaranteedRequired,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_NOT_ALLOWED",
        models::OrderCancelReason::StopLossOnFillGuaranteedNotAllowed,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_MINIMUM_DISTANCE_NOT_MET",
        models::OrderCancelReason::StopLossOnFillGuaranteedMinimumDistanceNotMet,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED",
        models::OrderCancelReason::StopLossOnFillGuaranteedLevelRestrictionExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_HEDGING_NOT_ALLOWED",
        models::OrderCancelReason::StopLossOnFillGuaranteedHedgingNotAllowed,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID",
        models::OrderCancelReason::StopLossOnFillTimeInForceInvalid,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::OrderCancelReason::StopLossOnFillTriggerConditionInvalid,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::OrderCancelReason::GuaranteedStopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_LOSS",
        models::OrderCancelReason::GuaranteedStopLossOnFillLoss,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::OrderCancelReason::GuaranteedStopLossOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_REQUIRED",
        models::OrderCancelReason::GuaranteedStopLossOnFillRequired,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_NOT_ALLOWED",
        models::OrderCancelReason::GuaranteedStopLossOnFillNotAllowed,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_MINIMUM_DISTANCE_NOT_MET",
        models::OrderCancelReason::GuaranteedStopLossOnFillMinimumDistanceNotMet,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_LEVEL_RESTRICTION_VOLUME_EXCEEDED",
        models::OrderCancelReason::GuaranteedStopLossOnFillLevelRestrictionVolumeExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_LEVEL_RESTRICTION_PRICE_RANGE_EXCEEDED",
        models::OrderCancelReason::GuaranteedStopLossOnFillLevelRestrictionPriceRangeExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_HEDGING_NOT_ALLOWED",
        models::OrderCancelReason::GuaranteedStopLossOnFillHedgingNotAllowed,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID",
        models::OrderCancelReason::GuaranteedStopLossOnFillTimeInForceInvalid,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::OrderCancelReason::GuaranteedStopLossOnFillTriggerConditionInvalid,
    );
    round_trip::<models::OrderCancelReason>(
        "TAKE_PROFIT_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::OrderCancelReason::TakeProfitOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::OrderCancelReason::TrailingStopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::OrderCancelReason>(
        "CLIENT_TRADE_ID_ALREADY_EXISTS",
        models::OrderCancelReason::ClientTradeIdAlreadyExists,
    );
    round_trip::<models::OrderCancelReason>(
        "POSITION_CLOSEOUT_FAILED",
        models::OrderCancelReason::PositionCloseoutFailed,
    );
    round_trip::<models::OrderCancelReason>(
        "OPEN_TRADES_ALLOWED_EXCEEDED",
        models::OrderCancelReason::OpenTradesAllowedExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "PENDING_ORDERS_ALLOWED_EXCEEDED",
        models::OrderCancelReason::PendingOrdersAllowedExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS",
        models::OrderCancelReason::TakeProfitOnFillClientOrderIdAlreadyExists,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS",
        models::OrderCancelReason::StopLossOnFillClientOrderIdAlreadyExists,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS",
        models::OrderCancelReason::GuaranteedStopLossOnFillClientOrderIdAlreadyExists,
    );
    round_trip::<models::OrderCancelReason>(
        "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS",
        models::OrderCancelReason::TrailingStopLossOnFillClientOrderIdAlreadyExists,
    );
    round_trip::<models::OrderCancelReason>(
        "POSITION_SIZE_EXCEEDED",
        models::OrderCancelReason::PositionSizeExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "HEDGING_GSLO_VIOLATION",
        models::OrderCancelReason::HedgingGsloViolation,
    );
    round_trip::<models::OrderCancelReason>(
        "ACCOUNT_POSITION_VALUE_LIMIT_EXCEEDED",
        models::OrderCancelReason::AccountPositionValueLimitExceeded,
    );
    round_trip::<models::OrderCancelReason>(
        "INSTRUMENT_BID_REDUCE_ONLY",
        models::OrderCancelReason::InstrumentBidReduceOnly,
    );
    round_trip::<models::OrderCancelReason>(
        "INSTRUMENT_ASK_REDUCE_ONLY",
        models::OrderCancelReason::InstrumentAskReduceOnly,
    );
    round_trip::<models::OrderCancelReason>(
        "INSTRUMENT_BID_HALTED",
        models::OrderCancelReason::InstrumentBidHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "INSTRUMENT_ASK_HALTED",
        models::OrderCancelReason::InstrumentAskHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_BID_HALTED",
        models::OrderCancelReason::StopLossOnFillGuaranteedBidHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_ASK_HALTED",
        models::OrderCancelReason::StopLossOnFillGuaranteedAskHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_BID_HALTED",
        models::OrderCancelReason::GuaranteedStopLossOnFillBidHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_ASK_HALTED",
        models::OrderCancelReason::GuaranteedStopLossOnFillAskHalted,
    );
    round_trip::<models::OrderCancelReason>(
        "FIFO_VIOLATION_SAFEGUARD_VIOLATION",
        models::OrderCancelReason::FifoViolationSafeguardViolation,
    );
    round_trip::<models::OrderCancelReason>(
        "FIFO_VIOLATION_SAFEGUARD_PARTIAL_CLOSE_VIOLATION",
        models::OrderCancelReason::FifoViolationSafeguardPartialCloseViolation,
    );
    round_trip::<models::OrderCancelReason>(
        "ORDERS_ON_FILL_RMO_MUTUAL_EXCLUSIVITY_MUTUALLY_EXCLUSIVE_VIOLATION",
        models::OrderCancelReason::OrdersOnFillRmoMutualExclusivityMutuallyExclusiveViolation,
    );
    round_trip::<models::MarketOrderMarginCloseoutReason>(
        "MARGIN_CHECK_VIOLATION",
        models::MarketOrderMarginCloseoutReason::MarginCheckViolation,
    );
    round_trip::<models::MarketOrderMarginCloseoutReason>(
        "REGULATORY_MARGIN_CALL_VIOLATION",
        models::MarketOrderMarginCloseoutReason::RegulatoryMarginCallViolation,
    );
    round_trip::<models::MarketOrderMarginCloseoutReason>(
        "REGULATORY_MARGIN_CHECK_VIOLATION",
        models::MarketOrderMarginCloseoutReason::RegulatoryMarginCheckViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "INTERNAL_SERVER_ERROR",
        models::TransactionRejectReason::InternalServerError,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSTRUMENT_PRICE_UNKNOWN",
        models::TransactionRejectReason::InstrumentPriceUnknown,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_NOT_ACTIVE",
        models::TransactionRejectReason::AccountNotActive,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_LOCKED",
        models::TransactionRejectReason::AccountLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_ORDER_CREATION_LOCKED",
        models::TransactionRejectReason::AccountOrderCreationLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_CONFIGURATION_LOCKED",
        models::TransactionRejectReason::AccountConfigurationLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_DEPOSIT_LOCKED",
        models::TransactionRejectReason::AccountDepositLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_WITHDRAWAL_LOCKED",
        models::TransactionRejectReason::AccountWithdrawalLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "ACCOUNT_ORDER_CANCEL_LOCKED",
        models::TransactionRejectReason::AccountOrderCancelLocked,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSTRUMENT_NOT_TRADEABLE",
        models::TransactionRejectReason::InstrumentNotTradeable,
    );
    round_trip::<models::TransactionRejectReason>(
        "PENDING_ORDERS_ALLOWED_EXCEEDED",
        models::TransactionRejectReason::PendingOrdersAllowedExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_ID_UNSPECIFIED",
        models::TransactionRejectReason::OrderIdUnspecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_DOESNT_EXIST",
        models::TransactionRejectReason::OrderDoesntExist,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_IDENTIFIER_INCONSISTENCY",
        models::TransactionRejectReason::OrderIdentifierInconsistency,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRADE_ID_UNSPECIFIED",
        models::TransactionRejectReason::TradeIdUnspecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRADE_DOESNT_EXIST",
        models::TransactionRejectReason::TradeDoesntExist,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRADE_IDENTIFIER_INCONSISTENCY",
        models::TransactionRejectReason::TradeIdentifierInconsistency,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSUFFICIENT_MARGIN",
        models::TransactionRejectReason::InsufficientMargin,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSTRUMENT_MISSING",
        models::TransactionRejectReason::InstrumentMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSTRUMENT_UNKNOWN",
        models::TransactionRejectReason::InstrumentUnknown,
    );
    round_trip::<models::TransactionRejectReason>(
        "UNITS_MISSING",
        models::TransactionRejectReason::UnitsMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "UNITS_INVALID",
        models::TransactionRejectReason::UnitsInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "UNITS_PRECISION_EXCEEDED",
        models::TransactionRejectReason::UnitsPrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "UNITS_LIMIT_EXCEEDED",
        models::TransactionRejectReason::UnitsLimitExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "UNITS_MINIMUM_NOT_MET",
        models::TransactionRejectReason::UnitsMinimumNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_MISSING",
        models::TransactionRejectReason::PriceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_INVALID",
        models::TransactionRejectReason::PriceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::PricePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_DISTANCE_MISSING",
        models::TransactionRejectReason::PriceDistanceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_DISTANCE_INVALID",
        models::TransactionRejectReason::PriceDistanceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_DISTANCE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::PriceDistancePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::TransactionRejectReason::PriceDistanceMaximumExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_DISTANCE_MINIMUM_NOT_MET",
        models::TransactionRejectReason::PriceDistanceMinimumNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "TIME_IN_FORCE_MISSING",
        models::TransactionRejectReason::TimeInForceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TIME_IN_FORCE_INVALID",
        models::TransactionRejectReason::TimeInForceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TIME_IN_FORCE_GTD_TIMESTAMP_MISSING",
        models::TransactionRejectReason::TimeInForceGtdTimestampMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TIME_IN_FORCE_GTD_TIMESTAMP_IN_PAST",
        models::TransactionRejectReason::TimeInForceGtdTimestampInPast,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_BOUND_INVALID",
        models::TransactionRejectReason::PriceBoundInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "PRICE_BOUND_PRECISION_EXCEEDED",
        models::TransactionRejectReason::PriceBoundPrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDERS_ON_FILL_DUPLICATE_CLIENT_ORDER_IDS",
        models::TransactionRejectReason::OrdersOnFillDuplicateClientOrderIds,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRADE_ON_FILL_CLIENT_EXTENSIONS_NOT_SUPPORTED",
        models::TransactionRejectReason::TradeOnFillClientExtensionsNotSupported,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_ORDER_ID_INVALID",
        models::TransactionRejectReason::ClientOrderIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_ORDER_ID_ALREADY_EXISTS",
        models::TransactionRejectReason::ClientOrderIdAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_ORDER_TAG_INVALID",
        models::TransactionRejectReason::ClientOrderTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_ORDER_COMMENT_INVALID",
        models::TransactionRejectReason::ClientOrderCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_TRADE_ID_INVALID",
        models::TransactionRejectReason::ClientTradeIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_TRADE_ID_ALREADY_EXISTS",
        models::TransactionRejectReason::ClientTradeIdAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_TRADE_TAG_INVALID",
        models::TransactionRejectReason::ClientTradeTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_TRADE_COMMENT_INVALID",
        models::TransactionRejectReason::ClientTradeCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_FILL_POSITION_ACTION_MISSING",
        models::TransactionRejectReason::OrderFillPositionActionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_FILL_POSITION_ACTION_INVALID",
        models::TransactionRejectReason::OrderFillPositionActionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRIGGER_CONDITION_MISSING",
        models::TransactionRejectReason::TriggerConditionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRIGGER_CONDITION_INVALID",
        models::TransactionRejectReason::TriggerConditionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_PARTIAL_FILL_OPTION_MISSING",
        models::TransactionRejectReason::OrderPartialFillOptionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_PARTIAL_FILL_OPTION_INVALID",
        models::TransactionRejectReason::OrderPartialFillOptionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "INVALID_REISSUE_IMMEDIATE_PARTIAL_FILL",
        models::TransactionRejectReason::InvalidReissueImmediatePartialFill,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDERS_ON_FILL_RMO_MUTUAL_EXCLUSIVITY_MUTUALLY_EXCLUSIVE_VIOLATION",
        models::TransactionRejectReason::OrdersOnFillRmoMutualExclusivityMutuallyExclusiveViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDERS_ON_FILL_RMO_MUTUAL_EXCLUSIVITY_GSLO_EXCLUDES_OTHERS_VIOLATION",
        models::TransactionRejectReason::OrdersOnFillRmoMutualExclusivityGsloExcludesOthersViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ORDER_ALREADY_EXISTS",
        models::TransactionRejectReason::TakeProfitOrderAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ORDER_WOULD_VIOLATE_FIFO_VIOLATION_SAFEGUARD",
        models::TransactionRejectReason::TakeProfitOrderWouldViolateFifoViolationSafeguard,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_PRICE_MISSING",
        models::TransactionRejectReason::TakeProfitOnFillPriceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_PRICE_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillPriceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_PRICE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::TakeProfitOnFillPricePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_TIME_IN_FORCE_MISSING",
        models::TransactionRejectReason::TakeProfitOnFillTimeInForceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_TIME_IN_FORCE_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillTimeInForceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_MISSING",
        models::TransactionRejectReason::TakeProfitOnFillGtdTimestampMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::TransactionRejectReason::TakeProfitOnFillGtdTimestampInPast,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_ID_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillClientOrderIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_TAG_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillClientOrderTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_COMMENT_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillClientOrderCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_TRIGGER_CONDITION_MISSING",
        models::TransactionRejectReason::TakeProfitOnFillTriggerConditionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TAKE_PROFIT_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::TransactionRejectReason::TakeProfitOnFillTriggerConditionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_ALREADY_EXISTS",
        models::TransactionRejectReason::StopLossOrderAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_REQUIRED",
        models::TransactionRejectReason::StopLossOrderGuaranteedRequired,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_PRICE_WITHIN_SPREAD",
        models::TransactionRejectReason::StopLossOrderGuaranteedPriceWithinSpread,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_NOT_ALLOWED",
        models::TransactionRejectReason::StopLossOrderGuaranteedNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_HALTED_CREATE_VIOLATION",
        models::TransactionRejectReason::StopLossOrderGuaranteedHaltedCreateViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_HALTED_TIGHTEN_VIOLATION",
        models::TransactionRejectReason::StopLossOrderGuaranteedHaltedTightenViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_HEDGING_NOT_ALLOWED",
        models::TransactionRejectReason::StopLossOrderGuaranteedHedgingNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_MINIMUM_DISTANCE_NOT_MET",
        models::TransactionRejectReason::StopLossOrderGuaranteedMinimumDistanceNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_NOT_CANCELABLE",
        models::TransactionRejectReason::StopLossOrderNotCancelable,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_NOT_REPLACEABLE",
        models::TransactionRejectReason::StopLossOrderNotReplaceable,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED",
        models::TransactionRejectReason::StopLossOrderGuaranteedLevelRestrictionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_SPECIFIED",
        models::TransactionRejectReason::StopLossOrderPriceAndDistanceBothSpecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_MISSING",
        models::TransactionRejectReason::StopLossOrderPriceAndDistanceBothMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_WOULD_VIOLATE_FIFO_VIOLATION_SAFEGUARD",
        models::TransactionRejectReason::StopLossOrderWouldViolateFifoViolationSafeguard,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_MUTUALLY_EXCLUSIVE_VIOLATION",
        models::TransactionRejectReason::StopLossOrderRmoMutualExclusivityMutuallyExclusiveViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_GSLO_EXCLUDES_OTHERS_VIOLATION",
        models::TransactionRejectReason::StopLossOrderRmoMutualExclusivityGsloExcludesOthersViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_REQUIRED_FOR_PENDING_ORDER",
        models::TransactionRejectReason::StopLossOnFillRequiredForPendingOrder,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_NOT_ALLOWED",
        models::TransactionRejectReason::StopLossOnFillGuaranteedNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_REQUIRED",
        models::TransactionRejectReason::StopLossOnFillGuaranteedRequired,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_MISSING",
        models::TransactionRejectReason::StopLossOnFillPriceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_INVALID",
        models::TransactionRejectReason::StopLossOnFillPriceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::StopLossOnFillPricePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_MINIMUM_DISTANCE_NOT_MET",
        models::TransactionRejectReason::StopLossOnFillGuaranteedMinimumDistanceNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED",
        models::TransactionRejectReason::StopLossOnFillGuaranteedLevelRestrictionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_DISTANCE_INVALID",
        models::TransactionRejectReason::StopLossOnFillDistanceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::TransactionRejectReason::StopLossOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_DISTANCE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::StopLossOnFillDistancePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_SPECIFIED",
        models::TransactionRejectReason::StopLossOnFillPriceAndDistanceBothSpecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_MISSING",
        models::TransactionRejectReason::StopLossOnFillPriceAndDistanceBothMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_TIME_IN_FORCE_MISSING",
        models::TransactionRejectReason::StopLossOnFillTimeInForceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID",
        models::TransactionRejectReason::StopLossOnFillTimeInForceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_MISSING",
        models::TransactionRejectReason::StopLossOnFillGtdTimestampMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::TransactionRejectReason::StopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_INVALID",
        models::TransactionRejectReason::StopLossOnFillClientOrderIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_CLIENT_ORDER_TAG_INVALID",
        models::TransactionRejectReason::StopLossOnFillClientOrderTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_CLIENT_ORDER_COMMENT_INVALID",
        models::TransactionRejectReason::StopLossOnFillClientOrderCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_MISSING",
        models::TransactionRejectReason::StopLossOnFillTriggerConditionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::TransactionRejectReason::StopLossOnFillTriggerConditionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_ALREADY_EXISTS",
        models::TransactionRejectReason::GuaranteedStopLossOrderAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_REQUIRED",
        models::TransactionRejectReason::GuaranteedStopLossOrderRequired,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_PRICE_WITHIN_SPREAD",
        models::TransactionRejectReason::GuaranteedStopLossOrderPriceWithinSpread,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_NOT_ALLOWED",
        models::TransactionRejectReason::GuaranteedStopLossOrderNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_HALTED_CREATE_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderHaltedCreateViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_CREATE_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderCreateViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_HALTED_TIGHTEN_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderHaltedTightenViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_TIGHTEN_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderTightenViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_HEDGING_NOT_ALLOWED",
        models::TransactionRejectReason::GuaranteedStopLossOrderHedgingNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_MINIMUM_DISTANCE_NOT_MET",
        models::TransactionRejectReason::GuaranteedStopLossOrderMinimumDistanceNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_NOT_CANCELABLE",
        models::TransactionRejectReason::GuaranteedStopLossOrderNotCancelable,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_HALTED_NOT_CANCELABLE",
        models::TransactionRejectReason::GuaranteedStopLossOrderHaltedNotCancelable,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_NOT_REPLACEABLE",
        models::TransactionRejectReason::GuaranteedStopLossOrderNotReplaceable,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_HALTED_NOT_REPLACEABLE",
        models::TransactionRejectReason::GuaranteedStopLossOrderHaltedNotReplaceable,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_LEVEL_RESTRICTION_VOLUME_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOrderLevelRestrictionVolumeExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_LEVEL_RESTRICTION_PRICE_RANGE_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOrderLevelRestrictionPriceRangeExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_SPECIFIED",
        models::TransactionRejectReason::GuaranteedStopLossOrderPriceAndDistanceBothSpecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOrderPriceAndDistanceBothMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_WOULD_VIOLATE_FIFO_VIOLATION_SAFEGUARD",
        models::TransactionRejectReason::GuaranteedStopLossOrderWouldViolateFifoViolationSafeguard,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_MUTUALLY_EXCLUSIVE_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderRmoMutualExclusivityMutuallyExclusiveViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_GSLO_EXCLUDES_OTHERS_VIOLATION",
        models::TransactionRejectReason::GuaranteedStopLossOrderRmoMutualExclusivityGsloExcludesOthersViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_REQUIRED_FOR_PENDING_ORDER",
        models::TransactionRejectReason::GuaranteedStopLossOnFillRequiredForPendingOrder,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_NOT_ALLOWED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_REQUIRED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillRequired,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPriceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPriceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPricePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_MINIMUM_DISTANCE_NOT_MET",
        models::TransactionRejectReason::GuaranteedStopLossOnFillMinimumDistanceNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_LEVEL_RESTRICTION_VOLUME_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillLevelRestrictionVolumeExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_LEVEL_RESTRICTION_PRICE_RANGE_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillLevelRestrictionPriceRangeExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_DISTANCE_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillDistanceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_DISTANCE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillDistancePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_SPECIFIED",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPriceAndDistanceBothSpecified,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOnFillPriceAndDistanceBothMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TIME_IN_FORCE_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOnFillTimeInForceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillTimeInForceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOnFillGtdTimestampMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::TransactionRejectReason::GuaranteedStopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillClientOrderIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_CLIENT_ORDER_TAG_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillClientOrderTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_CLIENT_ORDER_COMMENT_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillClientOrderCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_MISSING",
        models::TransactionRejectReason::GuaranteedStopLossOnFillTriggerConditionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "GUARANTEED_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::TransactionRejectReason::GuaranteedStopLossOnFillTriggerConditionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ORDER_ALREADY_EXISTS",
        models::TransactionRejectReason::TrailingStopLossOrderAlreadyExists,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ORDER_WOULD_VIOLATE_FIFO_VIOLATION_SAFEGUARD",
        models::TransactionRejectReason::TrailingStopLossOrderWouldViolateFifoViolationSafeguard,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_MUTUALLY_EXCLUSIVE_VIOLATION",
        models::TransactionRejectReason::TrailingStopLossOrderRmoMutualExclusivityMutuallyExclusiveViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ORDER_RMO_MUTUAL_EXCLUSIVITY_GSLO_EXCLUDES_OTHERS_VIOLATION",
        models::TransactionRejectReason::TrailingStopLossOrderRmoMutualExclusivityGsloExcludesOthersViolation,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MISSING",
        models::TransactionRejectReason::TrailingStopLossOnFillPriceDistanceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillPriceDistanceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_PRECISION_EXCEEDED",
        models::TransactionRejectReason::TrailingStopLossOnFillPriceDistancePrecisionExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED",
        models::TransactionRejectReason::TrailingStopLossOnFillPriceDistanceMaximumExceeded,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MINIMUM_NOT_MET",
        models::TransactionRejectReason::TrailingStopLossOnFillPriceDistanceMinimumNotMet,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_TIME_IN_FORCE_MISSING",
        models::TransactionRejectReason::TrailingStopLossOnFillTimeInForceMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillTimeInForceInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_MISSING",
        models::TransactionRejectReason::TrailingStopLossOnFillGtdTimestampMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST",
        models::TransactionRejectReason::TrailingStopLossOnFillGtdTimestampInPast,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillClientOrderIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_TAG_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillClientOrderTagInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_COMMENT_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillClientOrderCommentInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ORDERS_NOT_SUPPORTED",
        models::TransactionRejectReason::TrailingStopLossOrdersNotSupported,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_MISSING",
        models::TransactionRejectReason::TrailingStopLossOnFillTriggerConditionMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "TRAILING_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID",
        models::TransactionRejectReason::TrailingStopLossOnFillTriggerConditionInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSE_TRADE_TYPE_MISSING",
        models::TransactionRejectReason::CloseTradeTypeMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSE_TRADE_PARTIAL_UNITS_MISSING",
        models::TransactionRejectReason::CloseTradePartialUnitsMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSE_TRADE_UNITS_EXCEED_TRADE_SIZE",
        models::TransactionRejectReason::CloseTradeUnitsExceedTradeSize,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSEOUT_POSITION_DOESNT_EXIST",
        models::TransactionRejectReason::CloseoutPositionDoesntExist,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSEOUT_POSITION_INCOMPLETE_SPECIFICATION",
        models::TransactionRejectReason::CloseoutPositionIncompleteSpecification,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSEOUT_POSITION_UNITS_EXCEED_POSITION_SIZE",
        models::TransactionRejectReason::CloseoutPositionUnitsExceedPositionSize,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSEOUT_POSITION_REJECT",
        models::TransactionRejectReason::CloseoutPositionReject,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLOSEOUT_POSITION_PARTIAL_UNITS_MISSING",
        models::TransactionRejectReason::CloseoutPositionPartialUnitsMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "MARKUP_GROUP_ID_INVALID",
        models::TransactionRejectReason::MarkupGroupIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "POSITION_AGGREGATION_MODE_INVALID",
        models::TransactionRejectReason::PositionAggregationModeInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "ADMIN_CONFIGURE_DATA_MISSING",
        models::TransactionRejectReason::AdminConfigureDataMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "MARGIN_RATE_INVALID",
        models::TransactionRejectReason::MarginRateInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "MARGIN_RATE_WOULD_TRIGGER_CLOSEOUT",
        models::TransactionRejectReason::MarginRateWouldTriggerCloseout,
    );
    round_trip::<models::TransactionRejectReason>(
        "ALIAS_INVALID",
        models::TransactionRejectReason::AliasInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_CONFIGURE_DATA_MISSING",
        models::TransactionRejectReason::ClientConfigureDataMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "MARGIN_RATE_WOULD_TRIGGER_MARGIN_CALL",
        models::TransactionRejectReason::MarginRateWouldTriggerMarginCall,
    );
    round_trip::<models::TransactionRejectReason>(
        "AMOUNT_INVALID",
        models::TransactionRejectReason::AmountInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "INSUFFICIENT_FUNDS",
        models::TransactionRejectReason::InsufficientFunds,
    );
    round_trip::<models::TransactionRejectReason>(
        "AMOUNT_MISSING",
        models::TransactionRejectReason::AmountMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "FUNDING_REASON_MISSING",
        models::TransactionRejectReason::FundingReasonMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "OCA_ORDER_IDS_STOP_LOSS_NOT_ALLOWED",
        models::TransactionRejectReason::OcaOrderIdsStopLossNotAllowed,
    );
    round_trip::<models::TransactionRejectReason>(
        "CLIENT_EXTENSIONS_DATA_MISSING",
        models::TransactionRejectReason::ClientExtensionsDataMissing,
    );
    round_trip::<models::TransactionRejectReason>(
        "REPLACING_ORDER_INVALID",
        models::TransactionRejectReason::ReplacingOrderInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "REPLACING_TRADE_ID_INVALID",
        models::TransactionRejectReason::ReplacingTradeIdInvalid,
    );
    round_trip::<models::TransactionRejectReason>(
        "ORDER_CANCEL_WOULD_TRIGGER_CLOSEOUT",
        models::TransactionRejectReason::OrderCancelWouldTriggerCloseout,
    );
    round_trip::<models::TransactionFilter>("ORDER", models::TransactionFilter::Order);
    round_trip::<models::TransactionFilter>("FUNDING", models::TransactionFilter::Funding);
    round_trip::<models::TransactionFilter>("ADMIN", models::TransactionFilter::Admin);
    round_trip::<models::TransactionFilter>("CREATE", models::TransactionFilter::Create);
    round_trip::<models::TransactionFilter>("CLOSE", models::TransactionFilter::Close);
    round_trip::<models::TransactionFilter>("REOPEN", models::TransactionFilter::Reopen);
    round_trip::<models::TransactionFilter>(
        "CLIENT_CONFIGURE",
        models::TransactionFilter::ClientConfigure,
    );
    round_trip::<models::TransactionFilter>(
        "CLIENT_CONFIGURE_REJECT",
        models::TransactionFilter::ClientConfigureReject,
    );
    round_trip::<models::TransactionFilter>(
        "TRANSFER_FUNDS",
        models::TransactionFilter::TransferFunds,
    );
    round_trip::<models::TransactionFilter>(
        "TRANSFER_FUNDS_REJECT",
        models::TransactionFilter::TransferFundsReject,
    );
    round_trip::<models::TransactionFilter>("MARKET_ORDER", models::TransactionFilter::MarketOrder);
    round_trip::<models::TransactionFilter>(
        "MARKET_ORDER_REJECT",
        models::TransactionFilter::MarketOrderReject,
    );
    round_trip::<models::TransactionFilter>("LIMIT_ORDER", models::TransactionFilter::LimitOrder);
    round_trip::<models::TransactionFilter>(
        "LIMIT_ORDER_REJECT",
        models::TransactionFilter::LimitOrderReject,
    );
    round_trip::<models::TransactionFilter>("STOP_ORDER", models::TransactionFilter::StopOrder);
    round_trip::<models::TransactionFilter>(
        "STOP_ORDER_REJECT",
        models::TransactionFilter::StopOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "MARKET_IF_TOUCHED_ORDER",
        models::TransactionFilter::MarketIfTouchedOrder,
    );
    round_trip::<models::TransactionFilter>(
        "MARKET_IF_TOUCHED_ORDER_REJECT",
        models::TransactionFilter::MarketIfTouchedOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "TAKE_PROFIT_ORDER",
        models::TransactionFilter::TakeProfitOrder,
    );
    round_trip::<models::TransactionFilter>(
        "TAKE_PROFIT_ORDER_REJECT",
        models::TransactionFilter::TakeProfitOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "STOP_LOSS_ORDER",
        models::TransactionFilter::StopLossOrder,
    );
    round_trip::<models::TransactionFilter>(
        "STOP_LOSS_ORDER_REJECT",
        models::TransactionFilter::StopLossOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "GUARANTEED_STOP_LOSS_ORDER",
        models::TransactionFilter::GuaranteedStopLossOrder,
    );
    round_trip::<models::TransactionFilter>(
        "GUARANTEED_STOP_LOSS_ORDER_REJECT",
        models::TransactionFilter::GuaranteedStopLossOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "TRAILING_STOP_LOSS_ORDER",
        models::TransactionFilter::TrailingStopLossOrder,
    );
    round_trip::<models::TransactionFilter>(
        "TRAILING_STOP_LOSS_ORDER_REJECT",
        models::TransactionFilter::TrailingStopLossOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "ONE_CANCELS_ALL_ORDER",
        models::TransactionFilter::OneCancelsAllOrder,
    );
    round_trip::<models::TransactionFilter>(
        "ONE_CANCELS_ALL_ORDER_REJECT",
        models::TransactionFilter::OneCancelsAllOrderReject,
    );
    round_trip::<models::TransactionFilter>(
        "ONE_CANCELS_ALL_ORDER_TRIGGERED",
        models::TransactionFilter::OneCancelsAllOrderTriggered,
    );
    round_trip::<models::TransactionFilter>("ORDER_FILL", models::TransactionFilter::OrderFill);
    round_trip::<models::TransactionFilter>("ORDER_CANCEL", models::TransactionFilter::OrderCancel);
    round_trip::<models::TransactionFilter>(
        "ORDER_CANCEL_REJECT",
        models::TransactionFilter::OrderCancelReject,
    );
    round_trip::<models::TransactionFilter>(
        "ORDER_CLIENT_EXTENSIONS_MODIFY",
        models::TransactionFilter::OrderClientExtensionsModify,
    );
    round_trip::<models::TransactionFilter>(
        "ORDER_CLIENT_EXTENSIONS_MODIFY_REJECT",
        models::TransactionFilter::OrderClientExtensionsModifyReject,
    );
    round_trip::<models::TransactionFilter>(
        "TRADE_CLIENT_EXTENSIONS_MODIFY",
        models::TransactionFilter::TradeClientExtensionsModify,
    );
    round_trip::<models::TransactionFilter>(
        "TRADE_CLIENT_EXTENSIONS_MODIFY_REJECT",
        models::TransactionFilter::TradeClientExtensionsModifyReject,
    );
    round_trip::<models::TransactionFilter>(
        "MARGIN_CALL_ENTER",
        models::TransactionFilter::MarginCallEnter,
    );
    round_trip::<models::TransactionFilter>(
        "MARGIN_CALL_EXTEND",
        models::TransactionFilter::MarginCallExtend,
    );
    round_trip::<models::TransactionFilter>(
        "MARGIN_CALL_EXIT",
        models::TransactionFilter::MarginCallExit,
    );
    round_trip::<models::TransactionFilter>(
        "DELAYED_TRADE_CLOSURE",
        models::TransactionFilter::DelayedTradeClosure,
    );
    round_trip::<models::TransactionFilter>(
        "DAILY_FINANCING",
        models::TransactionFilter::DailyFinancing,
    );
    round_trip::<models::TransactionFilter>(
        "RESET_RESETTABLE_PL",
        models::TransactionFilter::ResetResettablePl,
    );
    round_trip::<models::PriceStatus>("tradeable", models::PriceStatus::Tradeable);
    round_trip::<models::PriceStatus>("non-tradeable", models::PriceStatus::NonTradeable);
    round_trip::<models::PriceStatus>("invalid", models::PriceStatus::Invalid);
    round_trip::<models::InstrumentType>("CURRENCY", models::InstrumentType::Currency);
    round_trip::<models::InstrumentType>("CFD", models::InstrumentType::Cfd);
    round_trip::<models::InstrumentType>("METAL", models::InstrumentType::Metal);
    round_trip::<models::DayOfWeek>("SUNDAY", models::DayOfWeek::Sunday);
    round_trip::<models::DayOfWeek>("MONDAY", models::DayOfWeek::Monday);
    round_trip::<models::DayOfWeek>("TUESDAY", models::DayOfWeek::Tuesday);
    round_trip::<models::DayOfWeek>("WEDNESDAY", models::DayOfWeek::Wednesday);
    round_trip::<models::DayOfWeek>("THURSDAY", models::DayOfWeek::Thursday);
    round_trip::<models::DayOfWeek>("FRIDAY", models::DayOfWeek::Friday);
    round_trip::<models::DayOfWeek>("SATURDAY", models::DayOfWeek::Saturday);
    round_trip::<models::AcceptDatetimeFormat>("UNIX", models::AcceptDatetimeFormat::Unix);
    round_trip::<models::AcceptDatetimeFormat>("RFC3339", models::AcceptDatetimeFormat::Rfc3339);
    round_trip::<models::GuaranteedStopLossOrderModeForInstrument>(
        "DISABLED",
        models::GuaranteedStopLossOrderModeForInstrument::Disabled,
    );
    round_trip::<models::GuaranteedStopLossOrderModeForInstrument>(
        "ALLOWED",
        models::GuaranteedStopLossOrderModeForInstrument::Allowed,
    );
    round_trip::<models::GuaranteedStopLossOrderModeForInstrument>(
        "REQUIRED",
        models::GuaranteedStopLossOrderModeForInstrument::Required,
    );
    round_trip::<models::Direction>("LONG", models::Direction::Long);
    round_trip::<models::Direction>("SHORT", models::Direction::Short);
}

#[test]
fn an_undocumented_enum_value_fails_the_round_trip() {
    // Any string used to pass behind the Unknown arm, so a variant the
    // generator lost was invisible. An unrecognized spelling must now fail,
    // and the panic is the documented-variant assertion itself.
    let previous = std::panic::take_hook();
    std::panic::set_hook(Box::new(|_| {}));
    let result = std::panic::catch_unwind(|| {
        round_trip::<models::OrderType>("GARBAGE", models::OrderType::Market);
    });
    std::panic::set_hook(previous);
    let panic = result.expect_err("an unrecognized spelling must fail");
    let text = panic
        .downcast_ref::<String>()
        .map(String::as_str)
        .or_else(|| panic.downcast_ref::<&str>().copied())
        .unwrap_or_default();
    assert!(
        text.contains("must decode to its documented variant"),
        "panic message {text:?} is not the documented-variant assertion"
    );
}