use crate::model::NumberString;
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct EasyConvertFromCurrency {
#[serde(default)]
pub from_ccy: String,
#[serde(default)]
pub from_amt: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct EasyConvertCurrency {
#[serde(default)]
pub from_data: Vec<EasyConvertFromCurrency>,
#[serde(default)]
pub to_ccy: Vec<String>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct EasyConvertResult {
#[serde(default)]
pub from_ccy: String,
#[serde(default)]
pub to_ccy: String,
#[serde(default)]
pub fill_from_sz: NumberString,
#[serde(default)]
pub fill_to_sz: NumberString,
#[serde(default)]
pub status: String,
#[serde(default)]
pub u_time: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct EasyConvertHistory {
#[serde(default)]
pub from_ccy: String,
#[serde(default)]
pub to_ccy: String,
#[serde(default)]
pub fill_from_sz: NumberString,
#[serde(default)]
pub fill_to_sz: NumberString,
#[serde(default)]
pub acct: String,
#[serde(default)]
pub status: String,
#[serde(default)]
pub u_time: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayDebt {
#[serde(default)]
pub debt_ccy: String,
#[serde(default)]
pub debt_amt: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayAsset {
#[serde(default)]
pub repay_ccy: String,
#[serde(default)]
pub repay_amt: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayCurrency {
#[serde(default)]
pub debt_data: Vec<OneClickRepayDebt>,
#[serde(default)]
pub debt_type: String,
#[serde(default)]
pub repay_data: Vec<OneClickRepayAsset>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayResult {
#[serde(default)]
pub debt_ccy: String,
#[serde(default)]
pub repay_ccy: String,
#[serde(default)]
pub repay_ccy_list: Vec<String>,
#[serde(default)]
pub fill_debt_sz: NumberString,
#[serde(default)]
pub fill_repay_sz: NumberString,
#[serde(default)]
pub status: String,
#[serde(default)]
pub u_time: NumberString,
#[serde(default)]
pub ts: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayOrderInfo {
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub ord_type: String,
#[serde(default)]
pub side: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub fill_px: NumberString,
#[serde(default)]
pub fill_sz: NumberString,
#[serde(default)]
pub c_time: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OneClickRepayHistory {
#[serde(default)]
pub debt_ccy: String,
#[serde(default)]
pub repay_ccy: String,
#[serde(default)]
pub repay_ccy_list: Vec<String>,
#[serde(default)]
pub fill_debt_sz: NumberString,
#[serde(default)]
pub fill_repay_sz: NumberString,
#[serde(default)]
pub status: String,
#[serde(default)]
pub ord_id_info: Vec<OneClickRepayOrderInfo>,
#[serde(default)]
pub u_time: NumberString,
#[serde(default)]
pub ts: NumberString,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn decodes_easy_convert_currency_list() {
let row: EasyConvertCurrency = serde_json::from_str(
r#"{"fromData":[{"fromCcy":"ADA","fromAmt":"6.5"}],"toCcy":["USDT"]}"#,
)
.unwrap();
assert_eq!(row.from_data[0].from_ccy, "ADA");
assert_eq!(row.to_ccy, vec!["USDT".to_owned()]);
}
#[test]
fn decodes_one_click_repay_history() {
let row: OneClickRepayHistory = serde_json::from_str(
r#"{"debtCcy":"USDT","repayCcy":"BTC","fillDebtSz":"10","fillRepaySz":"0.001","status":"filled","uTime":"1"}"#,
).unwrap();
assert_eq!(row.debt_ccy, "USDT");
assert_eq!(row.status, "filled");
}
}