|
|
@@ -235,7 +235,7 @@ impl Exchange {
|
|
|
if res_data.code == "0" {
|
|
|
let res_data_str = res_data.data;
|
|
|
let res_data_json: Vec<serde_json::Value> = serde_json::from_str(&*res_data_str).unwrap();
|
|
|
- let result = parse_order_info(res_data_json);
|
|
|
+ let result = parse_order_info(res_data_json[0].clone());
|
|
|
Ok(result)
|
|
|
} else {
|
|
|
Err(Error::new(ErrorKind::Other, res_data.message))
|
|
|
@@ -243,26 +243,26 @@ impl Exchange {
|
|
|
}
|
|
|
|
|
|
|
|
|
- // OKX查询订单
|
|
|
+ // OKX订阅订单
|
|
|
// symbol: 交易币对, "BTC_USDT"
|
|
|
- // order_id: 订单ID, "590910403358593111"
|
|
|
pub async fn subscribe_okx_order(&self, symbol: &String, mut bot_arc: Arc<Mutex<Bot>>) {
|
|
|
let real_symbol = self.get_real_symbol(symbol, "-".to_string());
|
|
|
|
|
|
let get_res_data = move |res_data: ResponseData| {
|
|
|
let bot_arc_clone = Arc::clone(&bot_arc);
|
|
|
-
|
|
|
async move {
|
|
|
if res_data.code == "0" {
|
|
|
let res_data_str = res_data.data;
|
|
|
- let res_data_json: Vec<serde_json::Value> = serde_json::from_str(&*res_data_str).unwrap();
|
|
|
- let result = parse_order_info(res_data_json);
|
|
|
+ let res_data_json: serde_json::Value = serde_json::from_str(&*res_data_str).unwrap();
|
|
|
+ let order_info_arr: serde_json::Value = res_data_json["data"].clone();
|
|
|
+ let result = parse_order_info(order_info_arr[0].clone());
|
|
|
+ print!("{:?}", result);
|
|
|
{
|
|
|
let mut bot = bot_arc_clone.lock().await;
|
|
|
bot.order_change_response(result).await;
|
|
|
}
|
|
|
} else {
|
|
|
- panic!("get_binance_depth: {}", res_data.message);
|
|
|
+ panic!("subscribe_okx_order: {}", res_data.message);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
@@ -342,15 +342,15 @@ impl Exchange {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-fn parse_order_info(res_data_json: Vec<serde_json::Value>) -> Order {
|
|
|
+fn parse_order_info(res_data_json: serde_json::Value) -> Order {
|
|
|
let order = Order {
|
|
|
- id: res_data_json[0]["ordId"].as_str().unwrap().parse().unwrap(),
|
|
|
- price: res_data_json[0]["px"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
- amount: res_data_json[0]["sz"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
- deal_amount: res_data_json[0]["accFillSz"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
- avg_price: res_data_json[0]["avgPx"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
- status: res_data_json[0]["state"].as_str().unwrap().parse().unwrap(),
|
|
|
- order_type: res_data_json[0]["instType"].as_str().unwrap().parse().unwrap(),
|
|
|
+ id: res_data_json["ordId"].as_str().unwrap().parse().unwrap(),
|
|
|
+ price: res_data_json["px"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
+ amount: res_data_json["sz"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
+ deal_amount: res_data_json["accFillSz"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
+ avg_price: res_data_json["avgPx"].as_str().unwrap_or("0").parse().unwrap_or(0.0),
|
|
|
+ status: res_data_json["state"].as_str().unwrap().parse().unwrap(),
|
|
|
+ order_type: res_data_json["instType"].as_str().unwrap().parse().unwrap(),
|
|
|
};
|
|
|
return order;
|
|
|
}
|