gate_spot_handle.rs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. use std::str::FromStr;
  2. use rust_decimal::Decimal;
  3. use serde_json::Value;
  4. use exchanges::response_base::ResponseData;
  5. use crate::{Trade, Record, OrderBook};
  6. pub fn handle_records(value: &Value) -> Vec<Record> {
  7. let mut records = vec![];
  8. let n = value["n"].as_str().unwrap().to_string();
  9. let n_split: Vec<String> = n.split("_").map(|s| s.to_string()).collect();
  10. let symbol = format!("{}_{}", n_split[n_split.len() - 2], n_split[n_split.len() - 1]);
  11. records.push(Record {
  12. time: Decimal::from_str(value["t"].as_str().unwrap()).unwrap() * Decimal::ONE_THOUSAND,
  13. open: Decimal::from_str(value["o"].as_str().unwrap()).unwrap(),
  14. high: Decimal::from_str(value["h"].as_str().unwrap()).unwrap(),
  15. low: Decimal::from_str(value["l"].as_str().unwrap()).unwrap(),
  16. close: Decimal::from_str(value["c"].as_str().unwrap()).unwrap(),
  17. volume: Decimal::from_str(value["v"].as_str().unwrap()).unwrap(),
  18. symbol,
  19. });
  20. return records;
  21. }
  22. pub fn format_depth_items(value: &Value) -> Vec<OrderBook> {
  23. let mut depth_items: Vec<OrderBook> = vec![];
  24. for value in value.as_array().unwrap() {
  25. let info = value.as_array().unwrap();
  26. depth_items.push(OrderBook {
  27. price: Decimal::from_str(info[0].as_str().unwrap()).unwrap(),
  28. amount: Decimal::from_str(info[1].as_str().unwrap()).unwrap(),
  29. })
  30. }
  31. return depth_items;
  32. }
  33. pub fn format_trade_items(res_data: &ResponseData) -> Vec<Trade> {
  34. let side = res_data.data["side"].as_str().unwrap();
  35. let amount = Decimal::from_str(res_data.data["amount"].as_str().unwrap()).unwrap();
  36. return vec![Trade {
  37. id: res_data.data["id"].to_string(),
  38. time: Decimal::from_str(res_data.data["create_time_ms"].as_str().unwrap()).unwrap().floor(),
  39. size: if side == "buy" { amount } else { -amount },
  40. price: Decimal::from_str(res_data.data["price"].as_str().unwrap().to_string().as_str()).unwrap(),
  41. symbol: res_data.data["currency_pair"].as_str().unwrap().to_string(),
  42. }];
  43. }