1use crate::models;
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
16pub struct RejectTransaction {
17 #[serde(rename = "id", skip_serializing_if = "Option::is_none")]
19 pub id: Option<i32>,
20 #[serde(rename = "time", skip_serializing_if = "Option::is_none")]
22 pub time: Option<String>,
23 #[serde(rename = "userID", skip_serializing_if = "Option::is_none")]
25 pub user_id: Option<i32>,
26 #[serde(rename = "accountID", skip_serializing_if = "Option::is_none")]
28 pub account_id: Option<String>,
29 #[serde(rename = "batchID", skip_serializing_if = "Option::is_none")]
31 pub batch_id: Option<i32>,
32 #[serde(rename = "requestID", skip_serializing_if = "Option::is_none")]
34 pub request_id: Option<String>,
35 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
36 pub r#type: Option<models::TransactionType>,
37 #[serde(rename = "rejectReason", skip_serializing_if = "Option::is_none")]
39 pub reject_reason: Option<RejectReason>,
40}
41
42impl RejectTransaction {
43 pub fn new() -> RejectTransaction {
45 RejectTransaction {
46 id: None,
47 time: None,
48 user_id: None,
49 account_id: None,
50 batch_id: None,
51 request_id: None,
52 r#type: None,
53 reject_reason: None,
54 }
55 }
56}
57#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
59pub enum RejectReason {
60 #[serde(rename = "INTERNAL_SERVER_ERROR")]
61 InternalServerError,
62 #[serde(rename = "INSTRUMENT_PRICE_UNKNOWN")]
63 InstrumentPriceUnknown,
64 #[serde(rename = "ACCOUNT_NOT_ACTIVE")]
65 AccountNotActive,
66 #[serde(rename = "ACCOUNT_LOCKED")]
67 AccountLocked,
68 #[serde(rename = "ACCOUNT_ORDER_CREATION_LOCKED")]
69 AccountOrderCreationLocked,
70 #[serde(rename = "ACCOUNT_CONFIGURATION_LOCKED")]
71 AccountConfigurationLocked,
72 #[serde(rename = "ACCOUNT_DEPOSIT_LOCKED")]
73 AccountDepositLocked,
74 #[serde(rename = "ACCOUNT_WITHDRAWAL_LOCKED")]
75 AccountWithdrawalLocked,
76 #[serde(rename = "ACCOUNT_ORDER_CANCEL_LOCKED")]
77 AccountOrderCancelLocked,
78 #[serde(rename = "INSTRUMENT_NOT_TRADEABLE")]
79 InstrumentNotTradeable,
80 #[serde(rename = "PENDING_ORDERS_ALLOWED_EXCEEDED")]
81 PendingOrdersAllowedExceeded,
82 #[serde(rename = "ORDER_ID_UNSPECIFIED")]
83 OrderIdUnspecified,
84 #[serde(rename = "ORDER_DOESNT_EXIST")]
85 OrderDoesntExist,
86 #[serde(rename = "ORDER_IDENTIFIER_INCONSISTENCY")]
87 OrderIdentifierInconsistency,
88 #[serde(rename = "TRADE_ID_UNSPECIFIED")]
89 TradeIdUnspecified,
90 #[serde(rename = "TRADE_DOESNT_EXIST")]
91 TradeDoesntExist,
92 #[serde(rename = "TRADE_IDENTIFIER_INCONSISTENCY")]
93 TradeIdentifierInconsistency,
94 #[serde(rename = "INSUFFICIENT_MARGIN")]
95 InsufficientMargin,
96 #[serde(rename = "INSTRUMENT_MISSING")]
97 InstrumentMissing,
98 #[serde(rename = "INSTRUMENT_UNKNOWN")]
99 InstrumentUnknown,
100 #[serde(rename = "UNITS_MISSING")]
101 UnitsMissing,
102 #[serde(rename = "UNITS_INVALID")]
103 UnitsInvalid,
104 #[serde(rename = "UNITS_PRECISION_EXCEEDED")]
105 UnitsPrecisionExceeded,
106 #[serde(rename = "UNITS_LIMIT_EXCEEDED")]
107 UnitsLimitExceeded,
108 #[serde(rename = "UNITS_MIMIMUM_NOT_MET")]
109 UnitsMimimumNotMet,
110 #[serde(rename = "PRICE_MISSING")]
111 PriceMissing,
112 #[serde(rename = "PRICE_INVALID")]
113 PriceInvalid,
114 #[serde(rename = "PRICE_PRECISION_EXCEEDED")]
115 PricePrecisionExceeded,
116 #[serde(rename = "PRICE_DISTANCE_MISSING")]
117 PriceDistanceMissing,
118 #[serde(rename = "PRICE_DISTANCE_INVALID")]
119 PriceDistanceInvalid,
120 #[serde(rename = "PRICE_DISTANCE_PRECISION_EXCEEDED")]
121 PriceDistancePrecisionExceeded,
122 #[serde(rename = "PRICE_DISTANCE_MAXIMUM_EXCEEDED")]
123 PriceDistanceMaximumExceeded,
124 #[serde(rename = "PRICE_DISTANCE_MINIMUM_NOT_MET")]
125 PriceDistanceMinimumNotMet,
126 #[serde(rename = "TIME_IN_FORCE_MISSING")]
127 TimeInForceMissing,
128 #[serde(rename = "TIME_IN_FORCE_INVALID")]
129 TimeInForceInvalid,
130 #[serde(rename = "TIME_IN_FORCE_GTD_TIMESTAMP_MISSING")]
131 TimeInForceGtdTimestampMissing,
132 #[serde(rename = "TIME_IN_FORCE_GTD_TIMESTAMP_IN_PAST")]
133 TimeInForceGtdTimestampInPast,
134 #[serde(rename = "PRICE_BOUND_INVALID")]
135 PriceBoundInvalid,
136 #[serde(rename = "PRICE_BOUND_PRECISION_EXCEEDED")]
137 PriceBoundPrecisionExceeded,
138 #[serde(rename = "ORDERS_ON_FILL_DUPLICATE_CLIENT_ORDER_IDS")]
139 OrdersOnFillDuplicateClientOrderIds,
140 #[serde(rename = "TRADE_ON_FILL_CLIENT_EXTENSIONS_NOT_SUPPORTED")]
141 TradeOnFillClientExtensionsNotSupported,
142 #[serde(rename = "CLIENT_ORDER_ID_INVALID")]
143 ClientOrderIdInvalid,
144 #[serde(rename = "CLIENT_ORDER_ID_ALREADY_EXISTS")]
145 ClientOrderIdAlreadyExists,
146 #[serde(rename = "CLIENT_ORDER_TAG_INVALID")]
147 ClientOrderTagInvalid,
148 #[serde(rename = "CLIENT_ORDER_COMMENT_INVALID")]
149 ClientOrderCommentInvalid,
150 #[serde(rename = "CLIENT_TRADE_ID_INVALID")]
151 ClientTradeIdInvalid,
152 #[serde(rename = "CLIENT_TRADE_ID_ALREADY_EXISTS")]
153 ClientTradeIdAlreadyExists,
154 #[serde(rename = "CLIENT_TRADE_TAG_INVALID")]
155 ClientTradeTagInvalid,
156 #[serde(rename = "CLIENT_TRADE_COMMENT_INVALID")]
157 ClientTradeCommentInvalid,
158 #[serde(rename = "ORDER_FILL_POSITION_ACTION_MISSING")]
159 OrderFillPositionActionMissing,
160 #[serde(rename = "ORDER_FILL_POSITION_ACTION_INVALID")]
161 OrderFillPositionActionInvalid,
162 #[serde(rename = "TRIGGER_CONDITION_MISSING")]
163 TriggerConditionMissing,
164 #[serde(rename = "TRIGGER_CONDITION_INVALID")]
165 TriggerConditionInvalid,
166 #[serde(rename = "ORDER_PARTIAL_FILL_OPTION_MISSING")]
167 OrderPartialFillOptionMissing,
168 #[serde(rename = "ORDER_PARTIAL_FILL_OPTION_INVALID")]
169 OrderPartialFillOptionInvalid,
170 #[serde(rename = "INVALID_REISSUE_IMMEDIATE_PARTIAL_FILL")]
171 InvalidReissueImmediatePartialFill,
172 #[serde(rename = "TAKE_PROFIT_ORDER_ALREADY_EXISTS")]
173 TakeProfitOrderAlreadyExists,
174 #[serde(rename = "TAKE_PROFIT_ON_FILL_PRICE_MISSING")]
175 TakeProfitOnFillPriceMissing,
176 #[serde(rename = "TAKE_PROFIT_ON_FILL_PRICE_INVALID")]
177 TakeProfitOnFillPriceInvalid,
178 #[serde(rename = "TAKE_PROFIT_ON_FILL_PRICE_PRECISION_EXCEEDED")]
179 TakeProfitOnFillPricePrecisionExceeded,
180 #[serde(rename = "TAKE_PROFIT_ON_FILL_TIME_IN_FORCE_MISSING")]
181 TakeProfitOnFillTimeInForceMissing,
182 #[serde(rename = "TAKE_PROFIT_ON_FILL_TIME_IN_FORCE_INVALID")]
183 TakeProfitOnFillTimeInForceInvalid,
184 #[serde(rename = "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_MISSING")]
185 TakeProfitOnFillGtdTimestampMissing,
186 #[serde(rename = "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
187 TakeProfitOnFillGtdTimestampInPast,
188 #[serde(rename = "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_ID_INVALID")]
189 TakeProfitOnFillClientOrderIdInvalid,
190 #[serde(rename = "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_TAG_INVALID")]
191 TakeProfitOnFillClientOrderTagInvalid,
192 #[serde(rename = "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_COMMENT_INVALID")]
193 TakeProfitOnFillClientOrderCommentInvalid,
194 #[serde(rename = "TAKE_PROFIT_ON_FILL_TRIGGER_CONDITION_MISSING")]
195 TakeProfitOnFillTriggerConditionMissing,
196 #[serde(rename = "TAKE_PROFIT_ON_FILL_TRIGGER_CONDITION_INVALID")]
197 TakeProfitOnFillTriggerConditionInvalid,
198 #[serde(rename = "STOP_LOSS_ORDER_ALREADY_EXISTS")]
199 StopLossOrderAlreadyExists,
200 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_REQUIRED")]
201 StopLossOrderGuaranteedRequired,
202 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_PRICE_WITHIN_SPREAD")]
203 StopLossOrderGuaranteedPriceWithinSpread,
204 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_NOT_ALLOWED")]
205 StopLossOrderGuaranteedNotAllowed,
206 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_HALTED_CREATE_VIOLATION")]
207 StopLossOrderGuaranteedHaltedCreateViolation,
208 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_HALTED_TIGHTEN_VIOLATION")]
209 StopLossOrderGuaranteedHaltedTightenViolation,
210 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_HEDGING_NOT_ALLOWED")]
211 StopLossOrderGuaranteedHedgingNotAllowed,
212 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_MINIMUM_DISTANCE_NOT_MET")]
213 StopLossOrderGuaranteedMinimumDistanceNotMet,
214 #[serde(rename = "STOP_LOSS_ORDER_NOT_CANCELABLE")]
215 StopLossOrderNotCancelable,
216 #[serde(rename = "STOP_LOSS_ORDER_NOT_REPLACEABLE")]
217 StopLossOrderNotReplaceable,
218 #[serde(rename = "STOP_LOSS_ORDER_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED")]
219 StopLossOrderGuaranteedLevelRestrictionExceeded,
220 #[serde(rename = "STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_SPECIFIED")]
221 StopLossOrderPriceAndDistanceBothSpecified,
222 #[serde(rename = "STOP_LOSS_ORDER_PRICE_AND_DISTANCE_BOTH_MISSING")]
223 StopLossOrderPriceAndDistanceBothMissing,
224 #[serde(rename = "STOP_LOSS_ON_FILL_REQUIRED_FOR_PENDING_ORDER")]
225 StopLossOnFillRequiredForPendingOrder,
226 #[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_NOT_ALLOWED")]
227 StopLossOnFillGuaranteedNotAllowed,
228 #[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_REQUIRED")]
229 StopLossOnFillGuaranteedRequired,
230 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_MISSING")]
231 StopLossOnFillPriceMissing,
232 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_INVALID")]
233 StopLossOnFillPriceInvalid,
234 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_PRECISION_EXCEEDED")]
235 StopLossOnFillPricePrecisionExceeded,
236 #[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_MINIMUM_DISTANCE_NOT_MET")]
237 StopLossOnFillGuaranteedMinimumDistanceNotMet,
238 #[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED")]
239 StopLossOnFillGuaranteedLevelRestrictionExceeded,
240 #[serde(rename = "STOP_LOSS_ON_FILL_DISTANCE_INVALID")]
241 StopLossOnFillDistanceInvalid,
242 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED")]
243 StopLossOnFillPriceDistanceMaximumExceeded,
244 #[serde(rename = "STOP_LOSS_ON_FILL_DISTANCE_PRECISION_EXCEEDED")]
245 StopLossOnFillDistancePrecisionExceeded,
246 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_SPECIFIED")]
247 StopLossOnFillPriceAndDistanceBothSpecified,
248 #[serde(rename = "STOP_LOSS_ON_FILL_PRICE_AND_DISTANCE_BOTH_MISSING")]
249 StopLossOnFillPriceAndDistanceBothMissing,
250 #[serde(rename = "STOP_LOSS_ON_FILL_TIME_IN_FORCE_MISSING")]
251 StopLossOnFillTimeInForceMissing,
252 #[serde(rename = "STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID")]
253 StopLossOnFillTimeInForceInvalid,
254 #[serde(rename = "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_MISSING")]
255 StopLossOnFillGtdTimestampMissing,
256 #[serde(rename = "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
257 StopLossOnFillGtdTimestampInPast,
258 #[serde(rename = "STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_INVALID")]
259 StopLossOnFillClientOrderIdInvalid,
260 #[serde(rename = "STOP_LOSS_ON_FILL_CLIENT_ORDER_TAG_INVALID")]
261 StopLossOnFillClientOrderTagInvalid,
262 #[serde(rename = "STOP_LOSS_ON_FILL_CLIENT_ORDER_COMMENT_INVALID")]
263 StopLossOnFillClientOrderCommentInvalid,
264 #[serde(rename = "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_MISSING")]
265 StopLossOnFillTriggerConditionMissing,
266 #[serde(rename = "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID")]
267 StopLossOnFillTriggerConditionInvalid,
268 #[serde(rename = "TRAILING_STOP_LOSS_ORDER_ALREADY_EXISTS")]
269 TrailingStopLossOrderAlreadyExists,
270 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MISSING")]
271 TrailingStopLossOnFillPriceDistanceMissing,
272 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_INVALID")]
273 TrailingStopLossOnFillPriceDistanceInvalid,
274 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_PRECISION_EXCEEDED")]
275 TrailingStopLossOnFillPriceDistancePrecisionExceeded,
276 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED")]
277 TrailingStopLossOnFillPriceDistanceMaximumExceeded,
278 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_PRICE_DISTANCE_MINIMUM_NOT_MET")]
279 TrailingStopLossOnFillPriceDistanceMinimumNotMet,
280 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_TIME_IN_FORCE_MISSING")]
281 TrailingStopLossOnFillTimeInForceMissing,
282 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID")]
283 TrailingStopLossOnFillTimeInForceInvalid,
284 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_MISSING")]
285 TrailingStopLossOnFillGtdTimestampMissing,
286 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
287 TrailingStopLossOnFillGtdTimestampInPast,
288 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_INVALID")]
289 TrailingStopLossOnFillClientOrderIdInvalid,
290 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_TAG_INVALID")]
291 TrailingStopLossOnFillClientOrderTagInvalid,
292 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_COMMENT_INVALID")]
293 TrailingStopLossOnFillClientOrderCommentInvalid,
294 #[serde(rename = "TRAILING_STOP_LOSS_ORDERS_NOT_SUPPORTED")]
295 TrailingStopLossOrdersNotSupported,
296 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_MISSING")]
297 TrailingStopLossOnFillTriggerConditionMissing,
298 #[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID")]
299 TrailingStopLossOnFillTriggerConditionInvalid,
300 #[serde(rename = "CLOSE_TRADE_TYPE_MISSING")]
301 CloseTradeTypeMissing,
302 #[serde(rename = "CLOSE_TRADE_PARTIAL_UNITS_MISSING")]
303 CloseTradePartialUnitsMissing,
304 #[serde(rename = "CLOSE_TRADE_UNITS_EXCEED_TRADE_SIZE")]
305 CloseTradeUnitsExceedTradeSize,
306 #[serde(rename = "CLOSEOUT_POSITION_DOESNT_EXIST")]
307 CloseoutPositionDoesntExist,
308 #[serde(rename = "CLOSEOUT_POSITION_INCOMPLETE_SPECIFICATION")]
309 CloseoutPositionIncompleteSpecification,
310 #[serde(rename = "CLOSEOUT_POSITION_UNITS_EXCEED_POSITION_SIZE")]
311 CloseoutPositionUnitsExceedPositionSize,
312 #[serde(rename = "CLOSEOUT_POSITION_REJECT")]
313 CloseoutPositionReject,
314 #[serde(rename = "CLOSEOUT_POSITION_PARTIAL_UNITS_MISSING")]
315 CloseoutPositionPartialUnitsMissing,
316 #[serde(rename = "MARKUP_GROUP_ID_INVALID")]
317 MarkupGroupIdInvalid,
318 #[serde(rename = "POSITION_AGGREGATION_MODE_INVALID")]
319 PositionAggregationModeInvalid,
320 #[serde(rename = "ADMIN_CONFIGURE_DATA_MISSING")]
321 AdminConfigureDataMissing,
322 #[serde(rename = "MARGIN_RATE_INVALID")]
323 MarginRateInvalid,
324 #[serde(rename = "MARGIN_RATE_WOULD_TRIGGER_CLOSEOUT")]
325 MarginRateWouldTriggerCloseout,
326 #[serde(rename = "ALIAS_INVALID")]
327 AliasInvalid,
328 #[serde(rename = "CLIENT_CONFIGURE_DATA_MISSING")]
329 ClientConfigureDataMissing,
330 #[serde(rename = "MARGIN_RATE_WOULD_TRIGGER_MARGIN_CALL")]
331 MarginRateWouldTriggerMarginCall,
332 #[serde(rename = "AMOUNT_INVALID")]
333 AmountInvalid,
334 #[serde(rename = "INSUFFICIENT_FUNDS")]
335 InsufficientFunds,
336 #[serde(rename = "AMOUNT_MISSING")]
337 AmountMissing,
338 #[serde(rename = "FUNDING_REASON_MISSING")]
339 FundingReasonMissing,
340 #[serde(rename = "CLIENT_EXTENSIONS_DATA_MISSING")]
341 ClientExtensionsDataMissing,
342 #[serde(rename = "REPLACING_ORDER_INVALID")]
343 ReplacingOrderInvalid,
344 #[serde(rename = "REPLACING_TRADE_ID_INVALID")]
345 ReplacingTradeIdInvalid,
346}
347
348impl Default for RejectReason {
349 fn default() -> RejectReason {
350 Self::InternalServerError
351 }
352}
353