1use crate::order::OrderKind;
2
3#[derive(Debug, thiserror::Error)]
5pub enum ConfigError {
6 #[error("unsupported domain")]
8 UnsupportedDomain,
9}
10
11#[derive(Clone, Copy, strum::EnumString, strum::Display)]
13#[repr(u8)]
14#[non_exhaustive]
15#[strum(serialize_all = "kebab-case")]
16#[cfg_attr(feature = "debug", derive(Debug))]
17#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
18#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
19#[cfg_attr(feature = "clap", clap(rename_all = "kebab-case"))]
20#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
21#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
22pub enum DomainDisabledFlag {
23 MarketSwap = 0,
25 MarketIncrease = 1,
27 MarketDecrease = 2,
29 Liquidation = 3,
31 AutoDeleveraging = 4,
33 LimitSwap = 5,
35 LimitIncrease = 6,
37 LimitDecrease = 7,
39 StopLossDecrease = 8,
41 Deposit = 9,
43 Withdrawal = 10,
45 Shift = 11,
47 GlvDeposit = 12,
49 GlvWithdrawal = 13,
51 GlvShift = 14,
53}
54
55impl TryFrom<OrderKind> for DomainDisabledFlag {
56 type Error = ConfigError;
57
58 fn try_from(kind: OrderKind) -> Result<Self, Self::Error> {
59 match kind {
60 OrderKind::MarketSwap => Ok(Self::MarketSwap),
61 OrderKind::MarketIncrease => Ok(Self::MarketIncrease),
62 OrderKind::MarketDecrease => Ok(Self::MarketDecrease),
63 OrderKind::Liquidation => Ok(Self::Liquidation),
64 OrderKind::AutoDeleveraging => Ok(Self::AutoDeleveraging),
65 OrderKind::LimitSwap => Ok(Self::LimitSwap),
66 OrderKind::LimitIncrease => Ok(Self::LimitIncrease),
67 OrderKind::LimitDecrease => Ok(Self::LimitDecrease),
68 OrderKind::StopLossDecrease => Ok(Self::StopLossDecrease),
69 }
70 }
71}
72
73#[derive(Clone, Copy, Default, strum::EnumString, strum::Display)]
75#[repr(u8)]
76#[non_exhaustive]
77#[strum(serialize_all = "kebab-case")]
78#[cfg_attr(feature = "debug", derive(Debug))]
79#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
80#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
81#[cfg_attr(feature = "clap", clap(rename_all = "kebab-case"))]
82#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
83#[cfg_attr(feature = "serde", serde(rename_all = "kebab-case"))]
84pub enum ActionDisabledFlag {
85 #[default]
87 Default = 0,
88 Create = 1,
90 Update = 2,
92 Execute = 3,
94 Cancel = 4,
96}
97
98pub fn display_feature(domain: DomainDisabledFlag, action: ActionDisabledFlag) -> String {
100 let action = match action {
101 ActionDisabledFlag::Default => String::new(),
102 action => format!(":{action}"),
103 };
104 format!("{domain}{action}")
105}
106
107#[derive(strum::EnumString, strum::Display, Clone, Copy)]
109#[strum(serialize_all = "snake_case")]
110#[non_exhaustive]
111#[cfg_attr(feature = "debug", derive(Debug))]
112#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
113#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
114#[cfg_attr(feature = "clap", clap(rename_all = "snake_case"))]
115pub enum AmountKey {
116 ClaimableTimeWindow,
118 RecentTimeWindow,
120 RequestExpiration,
122 OracleMaxAge,
124 OracleMaxTimestampRange,
126 OracleMaxFutureTimestampExcess,
128 AdlPricesMaxStaleness,
130 MinPositionAgeForManualClose,
132 MarketClosedPricesMaxStaleness,
134}
135
136#[derive(strum::EnumString, strum::Display, Clone, Copy)]
138#[strum(serialize_all = "snake_case")]
139#[non_exhaustive]
140#[cfg_attr(feature = "debug", derive(Debug))]
141#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
142#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
143#[cfg_attr(feature = "clap", clap(rename_all = "snake_case"))]
144pub enum FactorKey {
145 OracleRefPriceDeviation,
147 OrderFeeDiscountForReferredUser,
149}
150
151#[derive(strum::EnumString, strum::Display, Clone, Copy)]
153#[strum(serialize_all = "snake_case")]
154#[non_exhaustive]
155#[cfg_attr(feature = "debug", derive(Debug))]
156#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
157#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
158#[cfg_attr(feature = "clap", clap(rename_all = "snake_case"))]
159pub enum AddressKey {
160 Holding,
162}