rust_okx/api/trade/responses/
advanced.rs1use crate::model::NumberString;
2use serde::Deserialize;
3
4#[derive(Debug, Clone, Deserialize)]
6#[serde(rename_all = "camelCase")]
7#[non_exhaustive]
8pub struct EasyConvertFromCurrency {
9 #[serde(default)]
11 pub from_ccy: String,
12 #[serde(default)]
14 pub from_amt: NumberString,
15}
16
17#[derive(Debug, Clone, Deserialize)]
19#[serde(rename_all = "camelCase")]
20#[non_exhaustive]
21pub struct EasyConvertCurrency {
22 #[serde(default)]
24 pub from_data: Vec<EasyConvertFromCurrency>,
25 #[serde(default)]
27 pub to_ccy: Vec<String>,
28}
29
30#[derive(Debug, Clone, Deserialize)]
32#[serde(rename_all = "camelCase")]
33#[non_exhaustive]
34pub struct EasyConvertResult {
35 #[serde(default)]
37 pub from_ccy: String,
38 #[serde(default)]
40 pub to_ccy: String,
41 #[serde(default)]
43 pub fill_from_sz: NumberString,
44 #[serde(default)]
46 pub fill_to_sz: NumberString,
47 #[serde(default)]
49 pub status: String,
50 #[serde(default)]
52 pub u_time: NumberString,
53}
54
55#[derive(Debug, Clone, Deserialize)]
57#[serde(rename_all = "camelCase")]
58#[non_exhaustive]
59pub struct EasyConvertHistory {
60 #[serde(default)]
62 pub from_ccy: String,
63 #[serde(default)]
65 pub to_ccy: String,
66 #[serde(default)]
68 pub fill_from_sz: NumberString,
69 #[serde(default)]
71 pub fill_to_sz: NumberString,
72 #[serde(default)]
74 pub acct: String,
75 #[serde(default)]
77 pub status: String,
78 #[serde(default)]
80 pub u_time: NumberString,
81}
82
83#[derive(Debug, Clone, Deserialize)]
85#[serde(rename_all = "camelCase")]
86#[non_exhaustive]
87pub struct OneClickRepayDebt {
88 #[serde(default)]
90 pub debt_ccy: String,
91 #[serde(default)]
93 pub debt_amt: NumberString,
94}
95
96#[derive(Debug, Clone, Deserialize)]
98#[serde(rename_all = "camelCase")]
99#[non_exhaustive]
100pub struct OneClickRepayAsset {
101 #[serde(default)]
103 pub repay_ccy: String,
104 #[serde(default)]
106 pub repay_amt: NumberString,
107}
108
109#[derive(Debug, Clone, Deserialize)]
111#[serde(rename_all = "camelCase")]
112#[non_exhaustive]
113pub struct OneClickRepayCurrency {
114 #[serde(default)]
116 pub debt_data: Vec<OneClickRepayDebt>,
117 #[serde(default)]
119 pub debt_type: String,
120 #[serde(default)]
122 pub repay_data: Vec<OneClickRepayAsset>,
123}
124
125#[derive(Debug, Clone, Deserialize)]
127#[serde(rename_all = "camelCase")]
128#[non_exhaustive]
129pub struct OneClickRepayResult {
130 #[serde(default)]
132 pub debt_ccy: String,
133 #[serde(default)]
135 pub repay_ccy: String,
136 #[serde(default)]
138 pub repay_ccy_list: Vec<String>,
139 #[serde(default)]
141 pub fill_debt_sz: NumberString,
142 #[serde(default)]
144 pub fill_repay_sz: NumberString,
145 #[serde(default)]
147 pub status: String,
148 #[serde(default)]
150 pub u_time: NumberString,
151 #[serde(default)]
153 pub ts: NumberString,
154}
155
156#[derive(Debug, Clone, Deserialize)]
158#[serde(rename_all = "camelCase")]
159#[non_exhaustive]
160pub struct OneClickRepayOrderInfo {
161 #[serde(default)]
163 pub ord_id: String,
164 #[serde(default)]
166 pub inst_id: String,
167 #[serde(default)]
169 pub ord_type: String,
170 #[serde(default)]
172 pub side: String,
173 #[serde(default)]
175 pub px: NumberString,
176 #[serde(default)]
178 pub fill_px: NumberString,
179 #[serde(default)]
181 pub fill_sz: NumberString,
182 #[serde(default)]
184 pub c_time: NumberString,
185}
186
187#[derive(Debug, Clone, Deserialize)]
189#[serde(rename_all = "camelCase")]
190#[non_exhaustive]
191pub struct OneClickRepayHistory {
192 #[serde(default)]
194 pub debt_ccy: String,
195 #[serde(default)]
197 pub repay_ccy: String,
198 #[serde(default)]
200 pub repay_ccy_list: Vec<String>,
201 #[serde(default)]
203 pub fill_debt_sz: NumberString,
204 #[serde(default)]
206 pub fill_repay_sz: NumberString,
207 #[serde(default)]
209 pub status: String,
210 #[serde(default)]
212 pub ord_id_info: Vec<OneClickRepayOrderInfo>,
213 #[serde(default)]
215 pub u_time: NumberString,
216 #[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}