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}
131
132#[derive(strum::EnumString, strum::Display, Clone, Copy)]
134#[strum(serialize_all = "snake_case")]
135#[non_exhaustive]
136#[cfg_attr(feature = "debug", derive(Debug))]
137#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
138#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
139#[cfg_attr(feature = "clap", clap(rename_all = "snake_case"))]
140pub enum FactorKey {
141 OracleRefPriceDeviation,
143 OrderFeeDiscountForReferredUser,
145}
146
147#[derive(strum::EnumString, strum::Display, Clone, Copy)]
149#[strum(serialize_all = "snake_case")]
150#[non_exhaustive]
151#[cfg_attr(feature = "debug", derive(Debug))]
152#[cfg_attr(feature = "enum-iter", derive(strum::EnumIter))]
153#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
154#[cfg_attr(feature = "clap", clap(rename_all = "snake_case"))]
155pub enum AddressKey {
156 Holding,
158}