1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
7#[serde(rename_all = "lowercase")]
8pub enum Category {
9 Spot,
11 Linear,
13 Inverse,
15 Option,
17}
18
19impl std::fmt::Display for Category {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 match self {
22 Self::Spot => write!(f, "spot"),
23 Self::Linear => write!(f, "linear"),
24 Self::Inverse => write!(f, "inverse"),
25 Self::Option => write!(f, "option"),
26 }
27 }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
32pub enum Side {
33 Buy,
35 Sell,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
41pub enum OrderType {
42 Market,
44 Limit,
46}
47
48#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
50pub enum TimeInForce {
51 GTC,
53 IOC,
55 FOK,
57 PostOnly,
59}
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
63pub enum OrderStatus {
64 Created,
66 New,
68 Rejected,
70 PartiallyFilled,
72 PartiallyFilledCanceled,
74 Filled,
76 Cancelled,
78 Untriggered,
80 Triggered,
82 Deactivated,
84 Active,
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
90pub enum PositionIdx {
91 #[serde(rename = "0")]
93 OneWay = 0,
94 #[serde(rename = "1")]
96 HedgeBuy = 1,
97 #[serde(rename = "2")]
99 HedgeSell = 2,
100}
101
102#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
104pub enum AccountType {
105 CONTRACT,
107 UNIFIED,
109 SPOT,
111 INVESTMENT,
113 OPTION,
115 FUND,
117}
118
119#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
121pub enum Interval {
122 #[serde(rename = "1")]
124 M1,
125 #[serde(rename = "3")]
127 M3,
128 #[serde(rename = "5")]
130 M5,
131 #[serde(rename = "15")]
133 M15,
134 #[serde(rename = "30")]
136 M30,
137 #[serde(rename = "60")]
139 H1,
140 #[serde(rename = "120")]
142 H2,
143 #[serde(rename = "240")]
145 H4,
146 #[serde(rename = "360")]
148 H6,
149 #[serde(rename = "720")]
151 H12,
152 #[serde(rename = "D")]
154 D1,
155 #[serde(rename = "W")]
157 W1,
158 #[serde(rename = "M")]
160 M1Month,
161}
162
163impl std::fmt::Display for Interval {
164 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
165 match self {
166 Self::M1 => write!(f, "1"),
167 Self::M3 => write!(f, "3"),
168 Self::M5 => write!(f, "5"),
169 Self::M15 => write!(f, "15"),
170 Self::M30 => write!(f, "30"),
171 Self::H1 => write!(f, "60"),
172 Self::H2 => write!(f, "120"),
173 Self::H4 => write!(f, "240"),
174 Self::H6 => write!(f, "360"),
175 Self::H12 => write!(f, "720"),
176 Self::D1 => write!(f, "D"),
177 Self::W1 => write!(f, "W"),
178 Self::M1Month => write!(f, "M"),
179 }
180 }
181}
182
183#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
185pub enum TriggerBy {
186 LastPrice,
188 IndexPrice,
190 MarkPrice,
192}
193
194#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
196pub enum PositionMode {
197 #[serde(rename = "0")]
199 MergedSingle = 0,
200 #[serde(rename = "3")]
202 BothSides = 3,
203}
204
205#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
207pub enum MarginMode {
208 CROSS,
210 ISOLATED,
212 PORTFOLIO,
214}
215
216#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
218pub enum TpSlMode {
219 Full,
221 Partial,
223}