use crate::{globals, strings};
use globals::legacy::orderbook::{self, get_local_asks, get_local_bids};
use kucoin_rs::kucoin::model::websocket::{Level2, WSResp};
use kucoin_rs::tokio::sync::broadcast;
use log::*;
use std::collections::HashMap;
static ERROR_PARSE_F64: &str = "Failed to parse value as f64";
pub fn get_max_key_ref(map: &HashMap<String, String>) -> (String, String) {
let mut max_key = f64::MIN;
let mut max_key_ref = &"".to_string();
let mut val_ref = &"".to_string();
for (key, value) in map {
let key_f64: f64 = key.parse().expect(ERROR_PARSE_F64);
if key_f64 > max_key {
max_key = key_f64;
max_key_ref = key;
val_ref = value;
}
}
(max_key_ref.clone(), val_ref.clone())
}
pub fn get_min_key_ref(map: &HashMap<String, String>) -> (String, String) {
let mut min_key = f64::MAX;
let mut min_key_ref = &"".to_string();
let mut val_ref = &"".to_string();
for (key, value) in map {
let key_f64: f64 = key.parse().expect(ERROR_PARSE_F64);
if key_f64 < min_key {
min_key = key_f64;
min_key_ref = key;
val_ref = value;
}
}
(min_key_ref.clone(), val_ref.clone())
}
pub fn get_best_ask_bid(symbol: &String) -> ((f64, f64), (f64, f64)) {
let query_err = "query to symbol failed locally";
let local_asks = get_local_asks(symbol).expect(query_err);
let local_bids = get_local_bids(symbol).expect(query_err);
let (best_ap, best_av) = get_min_key_ref(&local_asks.pricevolume);
let (best_bp, best_bv) = get_max_key_ref(&local_bids.pricevolume);
return (
(
best_ap.parse::<f64>().unwrap(),
best_av.parse::<f64>().unwrap(),
),
(
best_bp.parse::<f64>().unwrap(),
best_bv.parse::<f64>().unwrap(),
),
);
}
async fn check_arbitrage() {}
fn on_order_message_received(msg: WSResp<Level2>) {
if msg.subject.ne("trade.l2update") {
error!("unrecognised subject: {:?}", msg.subject);
return;
}
let ticker_name = strings::topic_to_symbol(msg.topic).expect("wrong ticker format");
let data = msg.data;
let symbol = data.symbol.clone();
orderbook::store_orderbook_changes(&ticker_name, data);
if symbol.eq("BTC-USDT") {
return;
}
}
pub fn accept_(msg: WSResp<Level2>) {}