Skip to main content

rust_okx/api/trade/responses/
advanced.rs

1use crate::model::NumberString;
2use serde::Deserialize;
3
4/// A convertible small balance returned by the easy-convert currency list.
5#[derive(Debug, Clone, Deserialize)]
6#[serde(rename_all = "camelCase")]
7#[non_exhaustive]
8pub struct EasyConvertFromCurrency {
9    /// Value returned by OKX in the `fromCcy` field.
10    #[serde(default)]
11    pub from_ccy: String,
12    /// Value returned by OKX in the `fromAmt` field.
13    #[serde(default)]
14    pub from_amt: NumberString,
15}
16
17/// Easy-convert currency row.
18#[derive(Debug, Clone, Deserialize)]
19#[serde(rename_all = "camelCase")]
20#[non_exhaustive]
21pub struct EasyConvertCurrency {
22    /// Value returned by OKX in the `fromData` field.
23    #[serde(default)]
24    pub from_data: Vec<EasyConvertFromCurrency>,
25    /// Value returned by OKX in the `toCcy` field.
26    #[serde(default)]
27    pub to_ccy: Vec<String>,
28}
29
30/// Easy-convert execution result row.
31#[derive(Debug, Clone, Deserialize)]
32#[serde(rename_all = "camelCase")]
33#[non_exhaustive]
34pub struct EasyConvertResult {
35    /// Value returned by OKX in the `fromCcy` field.
36    #[serde(default)]
37    pub from_ccy: String,
38    /// Value returned by OKX in the `toCcy` field.
39    #[serde(default)]
40    pub to_ccy: String,
41    /// Value returned by OKX in the `fillFromSz` field.
42    #[serde(default)]
43    pub fill_from_sz: NumberString,
44    /// Value returned by OKX in the `fillToSz` field.
45    #[serde(default)]
46    pub fill_to_sz: NumberString,
47    /// Value returned by OKX in the `status` field.
48    #[serde(default)]
49    pub status: String,
50    /// Value returned by OKX in the `uTime` field.
51    #[serde(default)]
52    pub u_time: NumberString,
53}
54
55/// Easy-convert history row.
56#[derive(Debug, Clone, Deserialize)]
57#[serde(rename_all = "camelCase")]
58#[non_exhaustive]
59pub struct EasyConvertHistory {
60    /// Value returned by OKX in the `fromCcy` field.
61    #[serde(default)]
62    pub from_ccy: String,
63    /// Value returned by OKX in the `toCcy` field.
64    #[serde(default)]
65    pub to_ccy: String,
66    /// Value returned by OKX in the `fillFromSz` field.
67    #[serde(default)]
68    pub fill_from_sz: NumberString,
69    /// Value returned by OKX in the `fillToSz` field.
70    #[serde(default)]
71    pub fill_to_sz: NumberString,
72    /// Value returned by OKX in the `acct` field.
73    #[serde(default)]
74    pub acct: String,
75    /// Value returned by OKX in the `status` field.
76    #[serde(default)]
77    pub status: String,
78    /// Value returned by OKX in the `uTime` field.
79    #[serde(default)]
80    pub u_time: NumberString,
81}
82
83/// Debt-side information returned by one-click-repay currency-list endpoints.
84#[derive(Debug, Clone, Deserialize)]
85#[serde(rename_all = "camelCase")]
86#[non_exhaustive]
87pub struct OneClickRepayDebt {
88    /// Value returned by OKX in the `debtCcy` field.
89    #[serde(default)]
90    pub debt_ccy: String,
91    /// Value returned by OKX in the `debtAmt` field.
92    #[serde(default)]
93    pub debt_amt: NumberString,
94}
95
96/// Repayment asset information returned by one-click-repay currency-list endpoints.
97#[derive(Debug, Clone, Deserialize)]
98#[serde(rename_all = "camelCase")]
99#[non_exhaustive]
100pub struct OneClickRepayAsset {
101    /// Value returned by OKX in the `repayCcy` field.
102    #[serde(default)]
103    pub repay_ccy: String,
104    /// Value returned by OKX in the `repayAmt` field.
105    #[serde(default)]
106    pub repay_amt: NumberString,
107}
108
109/// One-click-repay currency row (legacy and v2).
110#[derive(Debug, Clone, Deserialize)]
111#[serde(rename_all = "camelCase")]
112#[non_exhaustive]
113pub struct OneClickRepayCurrency {
114    /// Value returned by OKX in the `debtData` field.
115    #[serde(default)]
116    pub debt_data: Vec<OneClickRepayDebt>,
117    /// Value returned by OKX in the `debtType` field.
118    #[serde(default)]
119    pub debt_type: String,
120    /// Value returned by OKX in the `repayData` field.
121    #[serde(default)]
122    pub repay_data: Vec<OneClickRepayAsset>,
123}
124
125/// One-click-repay execution result row (legacy and v2).
126#[derive(Debug, Clone, Deserialize)]
127#[serde(rename_all = "camelCase")]
128#[non_exhaustive]
129pub struct OneClickRepayResult {
130    /// Value returned by OKX in the `debtCcy` field.
131    #[serde(default)]
132    pub debt_ccy: String,
133    /// Value returned by OKX in the `repayCcy` field.
134    #[serde(default)]
135    pub repay_ccy: String,
136    /// Value returned by OKX in the `repayCcyList` field.
137    #[serde(default)]
138    pub repay_ccy_list: Vec<String>,
139    /// Value returned by OKX in the `fillDebtSz` field.
140    #[serde(default)]
141    pub fill_debt_sz: NumberString,
142    /// Value returned by OKX in the `fillRepaySz` field.
143    #[serde(default)]
144    pub fill_repay_sz: NumberString,
145    /// Value returned by OKX in the `status` field.
146    #[serde(default)]
147    pub status: String,
148    /// Value returned by OKX in the `uTime` field.
149    #[serde(default)]
150    pub u_time: NumberString,
151    /// Value returned by OKX in the `ts` field.
152    #[serde(default)]
153    pub ts: NumberString,
154}
155
156/// Order generated while fulfilling a v2 one-click repayment.
157#[derive(Debug, Clone, Deserialize)]
158#[serde(rename_all = "camelCase")]
159#[non_exhaustive]
160pub struct OneClickRepayOrderInfo {
161    /// Value returned by OKX in the `ordId` field.
162    #[serde(default)]
163    pub ord_id: String,
164    /// Value returned by OKX in the `instId` field.
165    #[serde(default)]
166    pub inst_id: String,
167    /// Value returned by OKX in the `ordType` field.
168    #[serde(default)]
169    pub ord_type: String,
170    /// Value returned by OKX in the `side` field.
171    #[serde(default)]
172    pub side: String,
173    /// Value returned by OKX in the `px` field.
174    #[serde(default)]
175    pub px: NumberString,
176    /// Value returned by OKX in the `fillPx` field.
177    #[serde(default)]
178    pub fill_px: NumberString,
179    /// Value returned by OKX in the `fillSz` field.
180    #[serde(default)]
181    pub fill_sz: NumberString,
182    /// Value returned by OKX in the `cTime` field.
183    #[serde(default)]
184    pub c_time: NumberString,
185}
186
187/// One-click-repay history row (legacy and v2).
188#[derive(Debug, Clone, Deserialize)]
189#[serde(rename_all = "camelCase")]
190#[non_exhaustive]
191pub struct OneClickRepayHistory {
192    /// Value returned by OKX in the `debtCcy` field.
193    #[serde(default)]
194    pub debt_ccy: String,
195    /// Value returned by OKX in the `repayCcy` field.
196    #[serde(default)]
197    pub repay_ccy: String,
198    /// Value returned by OKX in the `repayCcyList` field.
199    #[serde(default)]
200    pub repay_ccy_list: Vec<String>,
201    /// Value returned by OKX in the `fillDebtSz` field.
202    #[serde(default)]
203    pub fill_debt_sz: NumberString,
204    /// Value returned by OKX in the `fillRepaySz` field.
205    #[serde(default)]
206    pub fill_repay_sz: NumberString,
207    /// Value returned by OKX in the `status` field.
208    #[serde(default)]
209    pub status: String,
210    /// Value returned by OKX in the `ordIdInfo` field.
211    #[serde(default)]
212    pub ord_id_info: Vec<OneClickRepayOrderInfo>,
213    /// Value returned by OKX in the `uTime` field.
214    #[serde(default)]
215    pub u_time: NumberString,
216    /// Value returned by OKX in the `ts` field.
217    #[serde(default)]
218    pub ts: NumberString,
219}
220
221#[cfg(test)]
222mod tests {
223    use super::*;
224
225    #[test]
226    fn decodes_easy_convert_currency_list() {
227        let row: EasyConvertCurrency = serde_json::from_str(
228            r#"{"fromData":[{"fromCcy":"ADA","fromAmt":"6.5"}],"toCcy":["USDT"]}"#,
229        )
230        .unwrap();
231        assert_eq!(row.from_data[0].from_ccy, "ADA");
232        assert_eq!(row.to_ccy, vec!["USDT".to_owned()]);
233    }
234
235    #[test]
236    fn decodes_one_click_repay_history() {
237        let row: OneClickRepayHistory = serde_json::from_str(
238            r#"{"debtCcy":"USDT","repayCcy":"BTC","fillDebtSz":"10","fillRepaySz":"0.001","status":"filled","uTime":"1"}"#,
239        ).unwrap();
240        assert_eq!(row.debt_ccy, "USDT");
241        assert_eq!(row.status, "filled");
242    }
243}