Skip to main content

rust_okx/api/account/responses/
config.rs

1use serde::Deserialize;
2
3use crate::model::{InstType, NumberString, PositionSide, TradeMode};
4
5/// Account configuration.
6#[derive(Debug, Clone, Deserialize)]
7#[serde(rename_all = "camelCase")]
8#[non_exhaustive]
9pub struct AccountConfig {
10    /// Account ID.
11    #[serde(default)]
12    pub uid: String,
13    /// Account level.
14    #[serde(default)]
15    pub acct_lv: String,
16    /// Position mode.
17    #[serde(default)]
18    pub pos_mode: String,
19    /// Greeks display type.
20    #[serde(default)]
21    pub greeks_type: String,
22    /// Whether auto-borrow is enabled. OKX returns this as a JSON boolean.
23    #[serde(default)]
24    pub auto_loan: bool,
25    /// API key permissions, comma-separated (e.g. `"read_only,trade,withdraw"`).
26    #[serde(default)]
27    pub perm: String,
28    /// Fee-rate level.
29    #[serde(default)]
30    pub level: String,
31    /// Temporary fee-rate level.
32    #[serde(default)]
33    pub level_tmp: String,
34    /// Contract isolated margin mode.
35    #[serde(default)]
36    pub ct_iso_mode: String,
37    /// Margin isolated margin mode.
38    #[serde(default)]
39    pub mgn_iso_mode: String,
40    /// Spot offset type.
41    #[serde(default)]
42    pub spot_offset_type: String,
43    /// Role type.
44    #[serde(default)]
45    pub role_type: String,
46    /// Lead-trading instruments.
47    #[serde(default)]
48    pub trader_insts: Vec<String>,
49    /// Spot role type.
50    #[serde(default)]
51    pub spot_role_type: String,
52    /// Spot lead-trading instruments.
53    #[serde(default)]
54    pub spot_trader_insts: Vec<String>,
55    /// Option authorization flag.
56    #[serde(default)]
57    pub op_auth: String,
58    /// API key IP whitelist.
59    #[serde(default)]
60    pub ip: String,
61    /// Main account UID.
62    #[serde(default)]
63    pub main_uid: String,
64    /// KYC level.
65    #[serde(default)]
66    pub kyc_lv: String,
67    /// API key label.
68    #[serde(default)]
69    pub label: String,
70}
71
72/// Result of setting position mode.
73#[derive(Debug, Clone, Deserialize)]
74#[serde(rename_all = "camelCase")]
75#[non_exhaustive]
76pub struct SetPositionModeResult {
77    /// Position mode.
78    #[serde(default)]
79    pub pos_mode: String,
80}
81
82/// Leverage information.
83#[derive(Debug, Clone, Deserialize)]
84#[serde(rename_all = "camelCase")]
85#[non_exhaustive]
86pub struct LeverageInfo {
87    /// Instrument ID.
88    #[serde(default)]
89    pub inst_id: String,
90    /// Margin mode.
91    pub mgn_mode: TradeMode,
92    /// Position side.
93    pub pos_side: PositionSide,
94    /// Leverage.
95    #[serde(default)]
96    pub lever: NumberString,
97}
98
99/// Estimated impact and limits for a leverage adjustment.
100#[derive(Debug, Clone, Deserialize)]
101#[serde(rename_all = "camelCase")]
102#[non_exhaustive]
103pub struct AdjustLeverageInfo {
104    /// Estimated margin in quote currency that can be transferred out.
105    #[serde(default)]
106    pub est_avail_quote_trans: NumberString,
107    /// Estimated margin that can be transferred out.
108    #[serde(default)]
109    pub est_avail_trans: NumberString,
110    /// Estimated liquidation price.
111    #[serde(default)]
112    pub est_liq_px: NumberString,
113    /// Estimated maximum amount / contract quantity.
114    #[serde(default)]
115    pub est_max_amt: NumberString,
116    /// Estimated margin needed by the position.
117    #[serde(default)]
118    pub est_mgn: NumberString,
119    /// Estimated margin in quote currency needed by the position.
120    #[serde(default)]
121    pub est_quote_mgn: NumberString,
122    /// Estimated maximum quote-currency loan amount for margin.
123    #[serde(default)]
124    pub est_quote_max_amt: NumberString,
125    /// Whether pending orders exist.
126    #[serde(default)]
127    pub exist_ord: bool,
128    /// Maximum leverage.
129    #[serde(default)]
130    pub max_lever: NumberString,
131    /// Minimum leverage.
132    #[serde(default)]
133    pub min_lever: NumberString,
134}
135
136/// Maximum order size information.
137#[derive(Debug, Clone, Deserialize)]
138#[serde(rename_all = "camelCase")]
139#[non_exhaustive]
140pub struct MaxOrderSize {
141    /// Instrument ID.
142    pub inst_id: String,
143    /// Maximum buy size.
144    #[serde(default)]
145    pub max_buy: NumberString,
146    /// Maximum sell size.
147    #[serde(default)]
148    pub max_sell: NumberString,
149}
150
151/// Maximum available size information.
152#[derive(Debug, Clone, Deserialize)]
153#[serde(rename_all = "camelCase")]
154#[non_exhaustive]
155pub struct MaxAvailableSize {
156    /// Instrument ID.
157    pub inst_id: String,
158    /// Available buy size.
159    #[serde(default)]
160    pub avail_buy: NumberString,
161    /// Available sell size.
162    #[serde(default)]
163    pub avail_sell: NumberString,
164}
165
166/// Trade fee-rate information.
167#[derive(Debug, Clone, Deserialize)]
168#[serde(rename_all = "camelCase")]
169#[non_exhaustive]
170pub struct FeeRate {
171    /// Fee-rate level.
172    #[serde(default)]
173    pub level: String,
174    /// Fee groups for this instrument type.
175    #[serde(default)]
176    pub fee_group: Vec<FeeGroup>,
177    /// Delivery fee rate.
178    #[serde(default)]
179    pub delivery: NumberString,
180    /// Fee rate for exercising the option.
181    #[serde(default)]
182    pub exercise: NumberString,
183    /// Instrument type.
184    pub inst_type: InstType,
185    /// Timestamp (Unix milliseconds).
186    #[serde(default)]
187    pub ts: NumberString,
188    /// Taker fee rate.
189    #[serde(default)]
190    pub taker: NumberString,
191    /// Maker fee rate.
192    #[serde(default)]
193    pub maker: NumberString,
194    /// Taker fee rate for USDC-margined contracts.
195    #[serde(rename = "takerUSDC", default)]
196    pub taker_usdc: NumberString,
197    /// Maker fee rate for USDC-margined contracts.
198    #[serde(rename = "makerUSDC", default)]
199    pub maker_usdc: NumberString,
200    /// Trading rule type.
201    #[serde(default)]
202    pub rule_type: String,
203    /// Settlement fee rate for event contracts.
204    #[serde(default)]
205    pub settle: NumberString,
206}
207
208/// Fee-rate group row nested in [`FeeRate`].
209#[derive(Debug, Clone, Deserialize)]
210#[serde(rename_all = "camelCase")]
211#[non_exhaustive]
212pub struct FeeGroup {
213    /// Taker fee rate.
214    #[serde(default)]
215    pub taker: NumberString,
216    /// Maker fee rate.
217    #[serde(default)]
218    pub maker: NumberString,
219    /// Instrument trading fee group ID.
220    #[serde(default)]
221    pub group_id: String,
222    /// ELP maker effective fee rate.
223    #[serde(default)]
224    pub elp_maker: NumberString,
225}
226
227/// Maximum withdrawal amount for a currency.
228#[derive(Debug, Clone, Deserialize)]
229#[serde(rename_all = "camelCase")]
230#[non_exhaustive]
231pub struct MaxWithdrawal {
232    /// Currency.
233    pub ccy: String,
234    /// Maximum withdrawal amount.
235    #[serde(default)]
236    pub max_wd: NumberString,
237    /// Maximum withdrawal amount excluding borrowed amount.
238    #[serde(default)]
239    pub max_wd_ex: NumberString,
240}
241
242/// Result of adding or reducing margin on a position.
243#[derive(Debug, Clone, Deserialize)]
244#[serde(rename_all = "camelCase")]
245#[non_exhaustive]
246pub struct AdjustMarginResult {
247    /// Instrument ID.
248    #[serde(default)]
249    pub inst_id: String,
250    /// Position side.
251    #[serde(default)]
252    pub pos_side: String,
253    /// Adjustment amount.
254    #[serde(default)]
255    pub amt: NumberString,
256    /// OKX adjustment type.
257    #[serde(rename = "type", default)]
258    pub adjustment_type: String,
259}
260
261/// Account-level instrument configuration.
262#[derive(Debug, Clone, Deserialize)]
263#[serde(rename_all = "camelCase")]
264#[non_exhaustive]
265pub struct AccountInstrument {
266    /// Instrument type.
267    #[serde(default)]
268    pub inst_type: String,
269    /// Instrument ID.
270    #[serde(default)]
271    pub inst_id: String,
272    /// Underlying.
273    #[serde(default)]
274    pub uly: String,
275    /// Instrument family.
276    #[serde(default)]
277    pub inst_family: String,
278    /// Base currency.
279    #[serde(default)]
280    pub base_ccy: String,
281    /// Quote currency.
282    #[serde(default)]
283    pub quote_ccy: String,
284    /// Settlement currency.
285    #[serde(default)]
286    pub settle_ccy: String,
287}
288
289/// Result of updating collateral assets.
290#[derive(Debug, Clone, Deserialize)]
291#[serde(rename_all = "camelCase")]
292#[non_exhaustive]
293pub struct SetCollateralAssetsResult {
294    /// OKX collateral-assets update type.
295    #[serde(rename = "type", default)]
296    pub collateral_type: String,
297    /// Currency list included in the update.
298    #[serde(default)]
299    pub ccy_list: Vec<String>,
300    /// Whether assets are enabled as collateral.
301    #[serde(default)]
302    pub collateral_enabled: bool,
303}
304
305/// Result of updating the greeks display type.
306#[derive(Debug, Clone, Deserialize)]
307#[serde(rename_all = "camelCase")]
308#[non_exhaustive]
309pub struct SetGreeksResult {
310    /// Greeks display type.
311    #[serde(default)]
312    pub greeks_type: String,
313}
314
315/// Result of updating isolated margin mode.
316#[derive(Debug, Clone, Deserialize)]
317#[serde(rename_all = "camelCase")]
318#[non_exhaustive]
319pub struct SetIsolatedModeResult {
320    /// Isolated margin mode.
321    #[serde(default)]
322    pub iso_mode: String,
323    /// OKX isolated-mode scope type.
324    #[serde(rename = "type", default)]
325    pub mode_type: String,
326}
327
328/// Result of updating auto loan.
329#[derive(Debug, Clone, Deserialize)]
330#[serde(rename_all = "camelCase")]
331#[non_exhaustive]
332pub struct SetAutoLoanResult {
333    /// Whether auto-loan is enabled. OKX returns this as a JSON boolean.
334    #[serde(default)]
335    pub auto_loan: bool,
336}
337
338/// Result of updating account level.
339#[derive(Debug, Clone, Deserialize)]
340#[serde(rename_all = "camelCase")]
341#[non_exhaustive]
342pub struct SetAccountLevelResult {
343    /// Account level.
344    #[serde(default)]
345    pub acct_lv: String,
346}
347
348/// Result of activating option trading.
349#[derive(Debug, Clone, Deserialize)]
350#[serde(rename_all = "camelCase")]
351#[non_exhaustive]
352pub struct ActivateOptionResult {
353    /// Activation time (Unix milliseconds).
354    #[serde(default)]
355    pub ts: NumberString,
356}