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    /// Total equity in USD.
149    #[serde(default)]
150    pub total_eq: NumberString,
151    /// Initial margin requirement in USD.
152    #[serde(default)]
153    pub imr: NumberString,
154    /// Maintenance margin requirement in USD.
155    #[serde(default)]
156    pub mmr: NumberString,
157    /// Margin ratio.
158    #[serde(default)]
159    pub mgn_ratio: NumberString,
160    /// Isolated equity in USD.
161    #[serde(default)]
162    pub iso_eq: NumberString,
163    /// Quantity of pending orders frozen (USD).
164    #[serde(default)]
165    pub ord_froz: NumberString,
166    /// Notional value in USD.
167    #[serde(default)]
168    pub notional_usd: NumberString,
169    /// Unrealized profit and loss in USD.
170    #[serde(default)]
171    pub upl: NumberString,
172    /// Update time (Unix milliseconds).
173    #[serde(default)]
174    pub u_time: NumberString,
175}
176
177/// Funding-account balance for a sub-account.
178#[derive(Debug, Clone, Deserialize)]
179#[serde(rename_all = "camelCase")]
180#[non_exhaustive]
181pub struct SubAccountFundingBalance {
182    /// Currency.
183    #[serde(default)]
184    pub ccy: String,
185    /// Available balance.
186    #[serde(default)]
187    pub avail_bal: NumberString,
188    /// Total balance.
189    #[serde(default)]
190    pub bal: NumberString,
191    /// Frozen balance.
192    #[serde(default)]
193    pub frozen_bal: NumberString,
194}
195
196/// Maximum withdrawal amount for a sub-account.
197#[derive(Debug, Clone, Deserialize)]
198#[serde(rename_all = "camelCase")]
199#[non_exhaustive]
200pub struct SubAccountMaxWithdrawal {
201    /// Currency.
202    #[serde(default)]
203    pub ccy: String,
204    /// Maximum withdrawal amount.
205    #[serde(default)]
206    pub max_wd: NumberString,
207    /// Maximum withdrawal amount (cross margin with borrowing).
208    #[serde(default)]
209    pub max_wd_ex: NumberString,
210    /// Maximum spot-offset withdrawal amount.
211    #[serde(default)]
212    pub spot_offset_max_wd: NumberString,
213    /// Maximum spot-offset withdrawal (cross margin with borrowing).
214    #[serde(default)]
215    pub spot_offset_max_wd_ex: NumberString,
216}
217
218/// An asset bill for a sub-account.
219#[derive(Debug, Clone, Deserialize)]
220#[serde(rename_all = "camelCase")]
221#[non_exhaustive]
222pub struct SubAccountBill {
223    /// Bill ID.
224    #[serde(default)]
225    pub bill_id: String,
226    /// Bill type.
227    #[serde(default, rename = "type")]
228    pub bill_type: String,
229    /// Currency.
230    #[serde(default)]
231    pub ccy: String,
232    /// Transfer amount.
233    #[serde(default)]
234    pub amt: NumberString,
235    /// Sub-account name.
236    #[serde(default)]
237    pub sub_acct: String,
238    /// Timestamp (Unix milliseconds).
239    #[serde(default)]
240    pub ts: NumberString,
241}
242
243/// An asset bill for a managed sub-account.
244#[derive(Debug, Clone, Deserialize)]
245#[serde(rename_all = "camelCase")]
246#[non_exhaustive]
247pub struct ManagedSubAccountBill {
248    /// Bill ID.
249    #[serde(default)]
250    pub bill_id: String,
251    /// Bill type.
252    #[serde(default, rename = "type")]
253    pub bill_type: String,
254    /// Currency.
255    #[serde(default)]
256    pub ccy: String,
257    /// Transfer amount.
258    #[serde(default)]
259    pub amt: NumberString,
260    /// Sub-account name.
261    #[serde(default)]
262    pub sub_acct: String,
263    /// Sub-account UID.
264    #[serde(default)]
265    pub sub_uid: String,
266    /// Timestamp (Unix milliseconds).
267    #[serde(default)]
268    pub ts: NumberString,
269}
270
271/// Result of an asset transfer between sub-accounts.
272#[derive(Debug, Clone, Deserialize)]
273#[serde(rename_all = "camelCase")]
274#[non_exhaustive]
275pub struct SubAccountTransferResult {
276    /// Transfer ID.
277    #[serde(default)]
278    pub trans_id: String,
279}
280
281/// Result of setting transfer-out permission for a sub-account.
282#[derive(Debug, Clone, Deserialize)]
283#[serde(rename_all = "camelCase")]
284#[non_exhaustive]
285pub struct SetTransferOutResult {
286    /// Sub-account name.
287    #[serde(default)]
288    pub sub_acct: String,
289    /// Whether transfers out are now permitted.
290    #[serde(default)]
291    pub can_trans_out: bool,
292}
293
294/// An entrusted sub-account entry.
295#[derive(Debug, Clone, Deserialize)]
296#[serde(rename_all = "camelCase")]
297#[non_exhaustive]
298pub struct EntrustSubAccount {
299    /// Sub-account name.
300    #[serde(default)]
301    pub sub_acct: String,
302}