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
/* Copyright 2023 Architect Financial Technologies LLC. This is free
 * software released under the GNU Affero Public License version 3. */

//! coinbase specific protocol components
use serde::{Deserialize, Serialize};
use netidx_derive::Pack;

#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Pack)]
pub enum NewOrderFailureReason {
    #[serde(rename = "UNKNOWN_FAILURE_REASON")]
    UnknownFailureReason,
    #[serde(rename = "UNSUPPORTED_ORDER_CONFIGURATION")]
    UnsupportedOrderConfiguration,
    #[serde(rename = "INVALID_SIDE")]
    InvalidSide,
    #[serde(rename = "INVALID_PRODUCT_ID")]
    InvalidProductId,
    #[serde(rename = "INVALID_SIZE_PRECISION")]
    InvalidSizePrecision,
    #[serde(rename = "INVALID_PRICE_PRECISION")]
    InvalidPricePrecision,
    #[serde(rename = "INSUFFICIENT_FUND")]
    InsufficientFund,
    #[serde(rename = "INVALID_LEDGER_BALANCE")]
    InvalidLedgerBalance,
    #[serde(rename = "ORDER_ENTRY_DISABLED")]
    OrderEntryDisabled,
    #[serde(rename = "INELIGIBLE_PAIR")]
    IneligiblePair,
    #[serde(rename = "INVALID_LIMIT_PRICE_POST_ONLY")]
    InvalidLimitPricePostOnly,
    #[serde(rename = "INVALID_LIMIT_PRICE")]
    InvalidLimitPrice,
    #[serde(rename = "INVALID_NO_LIQUIDITY")]
    InvalidNoLiquidity,
    #[serde(rename = "INVALID_REQUEST")]
    InvalidRequest,
    #[serde(rename = "COMMANDER_REJECTED_NEW_ORDER")]
    CommanderRejectedNewOrder,
    #[serde(rename = "INSUFFICIENT_FUNDS")]
    InsufficientFunds,
    #[serde(other)]
    Unknown,
}

impl Default for NewOrderFailureReason {
    fn default() -> Self {
        Self::Unknown
    }
}


#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Pack)]
pub enum PreviewFailureReason {
    #[serde(rename = "UNKNOWN_PREVIEW_FAILURE_REASON")]
    UnknownPreviewFailureReason,
    #[serde(rename = "PREVIEW_MISSING_COMMISSION_RATE")]
    PreviewMissingCommissionRate,
    #[serde(rename = "PREVIEW_INVALID_SIDE")]
    PreviewInvalidSide,
    #[serde(rename = "PREVIEW_INVALID_ORDER_CONFIG")]
    PreviewInvalidOrderConfig,
    #[serde(rename = "PREVIEW_INVALID_PRODUCT_ID")]
    PreviewInvalidProductId,
    #[serde(rename = "PREVIEW_INVALID_SIZE_PRECISION")]
    PreviewInvalidSizePrecision,
    #[serde(rename = "PREVIEW_INVALID_PRICE_PRECISION")]
    PreviewInvalidPricePrecision,
    #[serde(rename = "PREVIEW_MISSING_PRODUCT_PRICE_BOOK")]
    PreviewMissingProductPriceBook,
    #[serde(rename = "PREVIEW_INVALID_LEDGER_BALANCE")]
    PreviewInvalidLedgerBalance,
    #[serde(rename = "PREVIEW_INSUFFICIENT_LEDGER_BALANCE")]
    PreviewInsufficientLedgerBalance,
    #[serde(rename = "PREVIEW_INVALID_LIMIT_PRICE_POST_ONLY")]
    PreviewInvalidLimitPricePostOnly,
    #[serde(rename = "PREVIEW_INVALID_LIMIT_PRICE")]
    PreviewInvalidLimitPrice,
    #[serde(rename = "PREVIEW_INVALID_NO_LIQUIDITY")]
    PreviewInvalidNoLiquidity,
    #[serde(rename = "PREVIEW_INSUFFICIENT_FUND")]
    PreviewInsufficientFund,
    #[serde(rename = "PREVIEW_INVALID_COMMISSION_CONFIGURATION")]
    PreviewInvalidCommissionConfiguration,
    #[serde(rename = "PREVIEW_INVALID_STOP_PRICE")]
    PreviewInvalidStopPrice,
    #[serde(rename = "PREVIEW_INVALID_BASE_SIZE_TOO_LARGE")]
    PreviewInvalidBaseSizeTooLarge,
    #[serde(rename = "PREVIEW_INVALID_BASE_SIZE_TOO_SMALL")]
    PreviewInvalidBaseSizeTooSmall,
    #[serde(rename = "PREVIEW_INVALID_QUOTE_SIZE_PRECISION")]
    PreviewInvalidQuoteSizePrecision,
    #[serde(rename = "PREVIEW_INVALID_QUOTE_SIZE_TOO_LARGE")]
    PreviewInvalidQuoteSizeTooLarge,
    #[serde(rename = "PREVIEW_INVALID_PRICE_TOO_LARGE")]
    PreviewInvalidPriceTooLarge,
    #[serde(rename = "PREVIEW_INVALID_QUOTE_SIZE_TOO_SMALL")]
    PreviewInvalidQuoteSizeTooSmall,
    #[serde(rename = "PREVIEW_BREACHED_PRICE_LIMIT")]
    PreviewBreachedPriceLimit,
    #[serde(rename = "PREVIEW_BREACHED_ACCOUNT_POSITION_LIMIT")]
    PreviewBreachedAccountPositionLimit,
    #[serde(rename = "PREVIEW_BREACHED_COMPANY_POSITION_LIMIT")]
    PreviewBreachedCompanyPositionLimit,
    #[serde(rename = "PREVIEW_INVALID_MARGIN_HEALTH")]
    PreviewInvalidMarginHealth,
    #[serde(rename = "PREVIEW_RISK_PROXY_FAILURE")]
    PreviewRiskProxyFailure,
    #[serde(other)]
    Unknown,
}

impl Default for PreviewFailureReason {
    fn default() -> Self {
        Self::Unknown
    }
}