use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum OrderCancelReason {
#[serde(rename = "INTERNAL_SERVER_ERROR")]
InternalServerError,
#[serde(rename = "ACCOUNT_LOCKED")]
AccountLocked,
#[serde(rename = "ACCOUNT_NEW_POSITIONS_LOCKED")]
AccountNewPositionsLocked,
#[serde(rename = "ACCOUNT_ORDER_CREATION_LOCKED")]
AccountOrderCreationLocked,
#[serde(rename = "ACCOUNT_ORDER_FILL_LOCKED")]
AccountOrderFillLocked,
#[serde(rename = "CLIENT_REQUEST")]
ClientRequest,
#[serde(rename = "MIGRATION")]
Migration,
#[serde(rename = "MARKET_HALTED")]
MarketHalted,
#[serde(rename = "LINKED_TRADE_CLOSED")]
LinkedTradeClosed,
#[serde(rename = "TIME_IN_FORCE_EXPIRED")]
TimeInForceExpired,
#[serde(rename = "INSUFFICIENT_MARGIN")]
InsufficientMargin,
#[serde(rename = "FIFO_VIOLATION")]
FifoViolation,
#[serde(rename = "BOUNDS_VIOLATION")]
BoundsViolation,
#[serde(rename = "CLIENT_REQUEST_REPLACED")]
ClientRequestReplaced,
#[serde(rename = "INSUFFICIENT_LIQUIDITY")]
InsufficientLiquidity,
#[serde(rename = "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
TakeProfitOnFillGtdTimestampInPast,
#[serde(rename = "TAKE_PROFIT_ON_FILL_LOSS")]
TakeProfitOnFillLoss,
#[serde(rename = "LOSING_TAKE_PROFIT")]
LosingTakeProfit,
#[serde(rename = "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
StopLossOnFillGtdTimestampInPast,
#[serde(rename = "STOP_LOSS_ON_FILL_LOSS")]
StopLossOnFillLoss,
#[serde(rename = "STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED")]
StopLossOnFillPriceDistanceMaximumExceeded,
#[serde(rename = "STOP_LOSS_ON_FILL_REQUIRED")]
StopLossOnFillRequired,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_REQUIRED")]
StopLossOnFillGuaranteedRequired,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_NOT_ALLOWED")]
StopLossOnFillGuaranteedNotAllowed,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_MINIMUM_DISTANCE_NOT_MET")]
StopLossOnFillGuaranteedMinimumDistanceNotMet,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED")]
StopLossOnFillGuaranteedLevelRestrictionExceeded,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_HEDGING_NOT_ALLOWED")]
StopLossOnFillGuaranteedHedgingNotAllowed,
#[serde(rename = "STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID")]
StopLossOnFillTimeInForceInvalid,
#[serde(rename = "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID")]
StopLossOnFillTriggerConditionInvalid,
#[serde(rename = "TAKE_PROFIT_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED")]
TakeProfitOnFillPriceDistanceMaximumExceeded,
#[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST")]
TrailingStopLossOnFillGtdTimestampInPast,
#[serde(rename = "CLIENT_TRADE_ID_ALREADY_EXISTS")]
ClientTradeIdAlreadyExists,
#[serde(rename = "POSITION_CLOSEOUT_FAILED")]
PositionCloseoutFailed,
#[serde(rename = "OPEN_TRADES_ALLOWED_EXCEEDED")]
OpenTradesAllowedExceeded,
#[serde(rename = "PENDING_ORDERS_ALLOWED_EXCEEDED")]
PendingOrdersAllowedExceeded,
#[serde(rename = "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS")]
TakeProfitOnFillClientOrderIdAlreadyExists,
#[serde(rename = "STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS")]
StopLossOnFillClientOrderIdAlreadyExists,
#[serde(rename = "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS")]
TrailingStopLossOnFillClientOrderIdAlreadyExists,
#[serde(rename = "POSITION_SIZE_EXCEEDED")]
PositionSizeExceeded,
#[serde(rename = "HEDGING_GSLO_VIOLATION")]
HedgingGsloViolation,
#[serde(rename = "ACCOUNT_POSITION_VALUE_LIMIT_EXCEEDED")]
AccountPositionValueLimitExceeded,
#[serde(rename = "INSTRUMENT_BID_REDUCE_ONLY")]
InstrumentBidReduceOnly,
#[serde(rename = "INSTRUMENT_ASK_REDUCE_ONLY")]
InstrumentAskReduceOnly,
#[serde(rename = "INSTRUMENT_BID_HALTED")]
InstrumentBidHalted,
#[serde(rename = "INSTRUMENT_ASK_HALTED")]
InstrumentAskHalted,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_BID_HALTED")]
StopLossOnFillGuaranteedBidHalted,
#[serde(rename = "STOP_LOSS_ON_FILL_GUARANTEED_ASK_HALTED")]
StopLossOnFillGuaranteedAskHalted,
}
impl std::fmt::Display for OrderCancelReason {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
match self {
Self::InternalServerError => write!(f, "INTERNAL_SERVER_ERROR"),
Self::AccountLocked => write!(f, "ACCOUNT_LOCKED"),
Self::AccountNewPositionsLocked => write!(f, "ACCOUNT_NEW_POSITIONS_LOCKED"),
Self::AccountOrderCreationLocked => write!(f, "ACCOUNT_ORDER_CREATION_LOCKED"),
Self::AccountOrderFillLocked => write!(f, "ACCOUNT_ORDER_FILL_LOCKED"),
Self::ClientRequest => write!(f, "CLIENT_REQUEST"),
Self::Migration => write!(f, "MIGRATION"),
Self::MarketHalted => write!(f, "MARKET_HALTED"),
Self::LinkedTradeClosed => write!(f, "LINKED_TRADE_CLOSED"),
Self::TimeInForceExpired => write!(f, "TIME_IN_FORCE_EXPIRED"),
Self::InsufficientMargin => write!(f, "INSUFFICIENT_MARGIN"),
Self::FifoViolation => write!(f, "FIFO_VIOLATION"),
Self::BoundsViolation => write!(f, "BOUNDS_VIOLATION"),
Self::ClientRequestReplaced => write!(f, "CLIENT_REQUEST_REPLACED"),
Self::InsufficientLiquidity => write!(f, "INSUFFICIENT_LIQUIDITY"),
Self::TakeProfitOnFillGtdTimestampInPast => write!(f, "TAKE_PROFIT_ON_FILL_GTD_TIMESTAMP_IN_PAST"),
Self::TakeProfitOnFillLoss => write!(f, "TAKE_PROFIT_ON_FILL_LOSS"),
Self::LosingTakeProfit => write!(f, "LOSING_TAKE_PROFIT"),
Self::StopLossOnFillGtdTimestampInPast => write!(f, "STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST"),
Self::StopLossOnFillLoss => write!(f, "STOP_LOSS_ON_FILL_LOSS"),
Self::StopLossOnFillPriceDistanceMaximumExceeded => write!(f, "STOP_LOSS_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED"),
Self::StopLossOnFillRequired => write!(f, "STOP_LOSS_ON_FILL_REQUIRED"),
Self::StopLossOnFillGuaranteedRequired => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_REQUIRED"),
Self::StopLossOnFillGuaranteedNotAllowed => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_NOT_ALLOWED"),
Self::StopLossOnFillGuaranteedMinimumDistanceNotMet => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_MINIMUM_DISTANCE_NOT_MET"),
Self::StopLossOnFillGuaranteedLevelRestrictionExceeded => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_LEVEL_RESTRICTION_EXCEEDED"),
Self::StopLossOnFillGuaranteedHedgingNotAllowed => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_HEDGING_NOT_ALLOWED"),
Self::StopLossOnFillTimeInForceInvalid => write!(f, "STOP_LOSS_ON_FILL_TIME_IN_FORCE_INVALID"),
Self::StopLossOnFillTriggerConditionInvalid => write!(f, "STOP_LOSS_ON_FILL_TRIGGER_CONDITION_INVALID"),
Self::TakeProfitOnFillPriceDistanceMaximumExceeded => write!(f, "TAKE_PROFIT_ON_FILL_PRICE_DISTANCE_MAXIMUM_EXCEEDED"),
Self::TrailingStopLossOnFillGtdTimestampInPast => write!(f, "TRAILING_STOP_LOSS_ON_FILL_GTD_TIMESTAMP_IN_PAST"),
Self::ClientTradeIdAlreadyExists => write!(f, "CLIENT_TRADE_ID_ALREADY_EXISTS"),
Self::PositionCloseoutFailed => write!(f, "POSITION_CLOSEOUT_FAILED"),
Self::OpenTradesAllowedExceeded => write!(f, "OPEN_TRADES_ALLOWED_EXCEEDED"),
Self::PendingOrdersAllowedExceeded => write!(f, "PENDING_ORDERS_ALLOWED_EXCEEDED"),
Self::TakeProfitOnFillClientOrderIdAlreadyExists => write!(f, "TAKE_PROFIT_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS"),
Self::StopLossOnFillClientOrderIdAlreadyExists => write!(f, "STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS"),
Self::TrailingStopLossOnFillClientOrderIdAlreadyExists => write!(f, "TRAILING_STOP_LOSS_ON_FILL_CLIENT_ORDER_ID_ALREADY_EXISTS"),
Self::PositionSizeExceeded => write!(f, "POSITION_SIZE_EXCEEDED"),
Self::HedgingGsloViolation => write!(f, "HEDGING_GSLO_VIOLATION"),
Self::AccountPositionValueLimitExceeded => write!(f, "ACCOUNT_POSITION_VALUE_LIMIT_EXCEEDED"),
Self::InstrumentBidReduceOnly => write!(f, "INSTRUMENT_BID_REDUCE_ONLY"),
Self::InstrumentAskReduceOnly => write!(f, "INSTRUMENT_ASK_REDUCE_ONLY"),
Self::InstrumentBidHalted => write!(f, "INSTRUMENT_BID_HALTED"),
Self::InstrumentAskHalted => write!(f, "INSTRUMENT_ASK_HALTED"),
Self::StopLossOnFillGuaranteedBidHalted => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_BID_HALTED"),
Self::StopLossOnFillGuaranteedAskHalted => write!(f, "STOP_LOSS_ON_FILL_GUARANTEED_ASK_HALTED"),
}
}
}
impl Default for OrderCancelReason {
fn default() -> OrderCancelReason {
Self::InternalServerError
}
}