Skip to main content

rust_okx/api/sub_account/
responses.rs

1use serde::Deserialize;
2
3use crate::NumberString;
4
5/// A sub-account entry (list, create, entrust-list, set-transfer-out).
6#[derive(Debug, Clone, Deserialize)]
7#[serde(rename_all = "camelCase")]
8#[non_exhaustive]
9pub struct SubAccountEntry {
10    /// Sub-account name.
11    #[serde(default)]
12    pub sub_acct: String,
13    /// Sub-account label.
14    #[serde(default)]
15    pub label: String,
16    /// UID of the sub-account.
17    #[serde(default)]
18    pub uid: String,
19    /// Creation timestamp (Unix milliseconds).
20    #[serde(default)]
21    pub ts: NumberString,
22    /// Whether the sub-account is enabled.
23    #[serde(default)]
24    pub enable: bool,
25    /// Whether transfers out are permitted.
26    #[serde(default)]
27    pub can_trans_out: bool,
28    /// Whether Google Authenticator is enabled.
29    #[serde(default)]
30    pub g_auth: bool,
31    /// Mobile number bound to the sub-account.
32    #[serde(default)]
33    pub mobile: String,
34    /// Sub-account type (`"1"` = standard).
35    #[serde(default, rename = "type")]
36    pub sub_type: String,
37    /// Sub-account level.
38    #[serde(default)]
39    pub sub_acct_lv: String,
40    /// First-level sub-account name.
41    #[serde(default)]
42    pub first_lv_sub_acct: String,
43    /// Whether DMA is enabled.
44    #[serde(default)]
45    pub if_dma: bool,
46    /// List of frozen functions.
47    #[serde(default)]
48    pub frozen_func: Vec<String>,
49}
50
51/// An API key for a sub-account (create, list, modify, delete responses).
52#[derive(Debug, Clone, Deserialize)]
53#[serde(rename_all = "camelCase")]
54#[non_exhaustive]
55pub struct SubAccountApiKey {
56    /// Sub-account name.
57    #[serde(default)]
58    pub sub_acct: String,
59    /// API key label.
60    #[serde(default)]
61    pub label: String,
62    /// API key value.
63    #[serde(default)]
64    pub api_key: String,
65    /// Secret key (only returned on creation).
66    #[serde(default)]
67    pub secret_key: String,
68    /// Passphrase (only returned on creation).
69    #[serde(default)]
70    pub passphrase: String,
71    /// Permissions (comma-separated, e.g. `"read_only,trade"`).
72    #[serde(default)]
73    pub perm: String,
74    /// Allowed IP addresses (comma-separated).
75    #[serde(default)]
76    pub ip: String,
77    /// Creation timestamp (Unix milliseconds).
78    #[serde(default)]
79    pub ts: NumberString,
80}
81
82/// Per-currency balance detail within a sub-account trading balance.
83#[derive(Debug, Clone, Deserialize)]
84#[serde(rename_all = "camelCase")]
85#[non_exhaustive]
86pub struct SubAccountTradingBalanceDetail {
87    /// Currency.
88    #[serde(default)]
89    pub ccy: String,
90    /// Available balance.
91    #[serde(default)]
92    pub avail_bal: NumberString,
93    /// Available equity.
94    #[serde(default)]
95    pub avail_eq: NumberString,
96    /// Cash balance.
97    #[serde(default)]
98    pub cash_bal: NumberString,
99    /// Equity of the currency.
100    #[serde(default)]
101    pub eq: NumberString,
102    /// Equity in USD.
103    #[serde(default)]
104    pub eq_usd: NumberString,
105    /// Discount equity in USD.
106    #[serde(default)]
107    pub dis_eq: NumberString,
108    /// Frozen balance.
109    #[serde(default)]
110    pub frozen_bal: NumberString,
111    /// Quantity of pending orders frozen.
112    #[serde(default)]
113    pub ord_frozen: NumberString,
114    /// Unrealized profit and loss.
115    #[serde(default)]
116    pub upl: NumberString,
117    /// Interest.
118    #[serde(default)]
119    pub interest: NumberString,
120    /// Liabilities.
121    #[serde(default)]
122    pub liab: NumberString,
123    /// Cross-mode liabilities.
124    #[serde(default)]
125    pub cross_liab: NumberString,
126    /// Isolated equity.
127    #[serde(default)]
128    pub iso_eq: NumberString,
129    /// Isolated liabilities.
130    #[serde(default)]
131    pub iso_liab: NumberString,
132    /// Update time (Unix milliseconds).
133    #[serde(default)]
134    pub u_time: NumberString,
135}
136
137/// Full trading-account balance for a sub-account.
138#[derive(Debug, Clone, Deserialize)]
139#[serde(rename_all = "camelCase")]
140#[non_exhaustive]
141pub struct SubAccountTradingBalance {
142    /// Per-currency details.
143    #[serde(default)]
144    pub details: Vec<SubAccountTradingBalanceDetail>,
145    /// Adjusted equity in USD.
146    #[serde(default)]
147    pub adj_eq: NumberString,
148    /// Available equity in USD (Multi-currency margin / Portfolio margin).
149    #[serde(default)]
150    pub avail_eq: NumberString,
151    /// Total equity in USD.
152    #[serde(default)]
153    pub total_eq: NumberString,
154    /// Initial margin requirement in USD.
155    #[serde(default)]
156    pub imr: NumberString,
157    /// Maintenance margin requirement in USD.
158    #[serde(default)]
159    pub mmr: NumberString,
160    /// Margin ratio.
161    #[serde(default)]
162    pub mgn_ratio: NumberString,
163    /// Isolated equity in USD.
164    #[serde(default)]
165    pub iso_eq: NumberString,
166    /// Quantity of pending orders frozen (USD).
167    #[serde(default)]
168    pub ord_froz: NumberString,
169    /// Notional value in USD.
170    #[serde(default)]
171    pub notional_usd: NumberString,
172    /// Unrealized profit and loss in USD.
173    #[serde(default)]
174    pub upl: NumberString,
175    /// Update time (Unix milliseconds).
176    #[serde(default)]
177    pub u_time: NumberString,
178}
179
180/// Funding-account balance for a sub-account.
181#[derive(Debug, Clone, Deserialize)]
182#[serde(rename_all = "camelCase")]
183#[non_exhaustive]
184pub struct SubAccountFundingBalance {
185    /// Currency.
186    #[serde(default)]
187    pub ccy: String,
188    /// Available balance.
189    #[serde(default)]
190    pub avail_bal: NumberString,
191    /// Total balance.
192    #[serde(default)]
193    pub bal: NumberString,
194    /// Frozen balance.
195    #[serde(default)]
196    pub frozen_bal: NumberString,
197}
198
199/// Maximum withdrawal amount for a sub-account.
200#[derive(Debug, Clone, Deserialize)]
201#[serde(rename_all = "camelCase")]
202#[non_exhaustive]
203pub struct SubAccountMaxWithdrawal {
204    /// Currency.
205    #[serde(default)]
206    pub ccy: String,
207    /// Maximum withdrawal amount.
208    #[serde(default)]
209    pub max_wd: NumberString,
210    /// Maximum withdrawal amount (cross margin with borrowing).
211    #[serde(default)]
212    pub max_wd_ex: NumberString,
213    /// Maximum spot-offset withdrawal amount.
214    #[serde(default)]
215    pub spot_offset_max_wd: NumberString,
216    /// Maximum spot-offset withdrawal (cross margin with borrowing).
217    #[serde(default)]
218    pub spot_offset_max_wd_ex: NumberString,
219}
220
221/// An asset bill for a sub-account.
222#[derive(Debug, Clone, Deserialize)]
223#[serde(rename_all = "camelCase")]
224#[non_exhaustive]
225pub struct SubAccountBill {
226    /// Bill ID.
227    #[serde(default)]
228    pub bill_id: String,
229    /// Bill type.
230    #[serde(default, rename = "type")]
231    pub bill_type: String,
232    /// Currency.
233    #[serde(default)]
234    pub ccy: String,
235    /// Transfer amount.
236    #[serde(default)]
237    pub amt: NumberString,
238    /// Sub-account name.
239    #[serde(default)]
240    pub sub_acct: String,
241    /// Timestamp (Unix milliseconds).
242    #[serde(default)]
243    pub ts: NumberString,
244}
245
246/// An asset bill for a managed sub-account.
247#[derive(Debug, Clone, Deserialize)]
248#[serde(rename_all = "camelCase")]
249#[non_exhaustive]
250pub struct ManagedSubAccountBill {
251    /// Bill ID.
252    #[serde(default)]
253    pub bill_id: String,
254    /// Bill type.
255    #[serde(default, rename = "type")]
256    pub bill_type: String,
257    /// Currency.
258    #[serde(default)]
259    pub ccy: String,
260    /// Transfer amount.
261    #[serde(default)]
262    pub amt: NumberString,
263    /// Sub-account name.
264    #[serde(default)]
265    pub sub_acct: String,
266    /// Sub-account UID.
267    #[serde(default)]
268    pub sub_uid: String,
269    /// Timestamp (Unix milliseconds).
270    #[serde(default)]
271    pub ts: NumberString,
272}
273
274/// Result of an asset transfer between sub-accounts.
275#[derive(Debug, Clone, Deserialize)]
276#[serde(rename_all = "camelCase")]
277#[non_exhaustive]
278pub struct SubAccountTransferResult {
279    /// Transfer ID.
280    #[serde(default)]
281    pub trans_id: String,
282}
283
284/// Result of setting transfer-out permission for a sub-account.
285#[derive(Debug, Clone, Deserialize)]
286#[serde(rename_all = "camelCase")]
287#[non_exhaustive]
288pub struct SetTransferOutResult {
289    /// Sub-account name.
290    #[serde(default)]
291    pub sub_acct: String,
292    /// Whether transfers out are now permitted.
293    #[serde(default)]
294    pub can_trans_out: bool,
295}
296
297/// An entrusted sub-account entry.
298#[derive(Debug, Clone, Deserialize)]
299#[serde(rename_all = "camelCase")]
300#[non_exhaustive]
301pub struct EntrustSubAccount {
302    /// Sub-account name.
303    #[serde(default)]
304    pub sub_acct: String,
305}