binance_swap_handle.rs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. use std::str::FromStr;
  2. use rust_decimal::Decimal;
  3. use rust_decimal_macros::dec;
  4. use serde_json::Value;
  5. use exchanges::response_base::ResponseData;
  6. use crate::{MarketOrder, SpecialDepth, SpecialTicker};
  7. // 处理特殊Ticker信息
  8. pub fn handle_book_ticker(res_data: &ResponseData) -> SpecialDepth {
  9. let bp = Decimal::from_str((*res_data).data["b"].as_str().unwrap()).unwrap();
  10. let bq = Decimal::from_str((*res_data).data["B"].as_str().unwrap()).unwrap();
  11. let ap = Decimal::from_str((*res_data).data["a"].as_str().unwrap()).unwrap();
  12. let aq = Decimal::from_str((*res_data).data["A"].as_str().unwrap()).unwrap();
  13. let mp = (bp + ap) * dec!(0.5);
  14. let t = Decimal::from_str(&(*res_data).data["u"].to_string()).unwrap();
  15. let create_at = (*res_data).data["E"].as_i64().unwrap() * 1000;
  16. let ticker_info = SpecialTicker { sell: ap, buy: bp, mid_price: mp, t, create_at };
  17. let depth_info = vec![bp, bq, ap, aq];
  18. SpecialDepth {
  19. name: (*res_data).label.clone(),
  20. depth: depth_info,
  21. ticker: ticker_info,
  22. t,
  23. create_at,
  24. }
  25. }
  26. // 格式化深度信息
  27. pub fn format_depth_items(value: Value) -> Vec<MarketOrder> {
  28. let mut depth_items: Vec<MarketOrder> = vec![];
  29. for value in value.as_array().unwrap() {
  30. depth_items.push(MarketOrder {
  31. price: Decimal::from_str(value[0].as_str().unwrap()).unwrap(),
  32. amount: Decimal::from_str(value[1].as_str().unwrap()).unwrap(),
  33. })
  34. }
  35. return depth_items;
  36. }