1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
mod crawlers;
mod market_type;
mod msg;
pub use market_type::MarketType;
pub use msg::*;
pub(crate) const SNAPSHOT_INTERVAL: u64 = 30;
pub fn crawl_trade<'a>(
exchange: &str,
market_type: MarketType,
symbols: &[String],
on_msg: Box<dyn FnMut(Message) + 'a>,
duration: Option<u64>,
) {
let func = match exchange {
"Binance" => crawlers::binance::crawl_trade,
"Bitfinex" => crawlers::bitfinex::crawl_trade,
"BitMEX" => crawlers::bitmex::crawl_trade,
"Bitstamp" => crawlers::bitstamp::crawl_trade,
"CoinbasePro" => crawlers::coinbase_pro::crawl_trade,
"Huobi" => crawlers::huobi::crawl_trade,
"Kraken" => crawlers::kraken::crawl_trade,
"MXC" => crawlers::mxc::crawl_trade,
"OKEx" => crawlers::okex::crawl_trade,
_ => panic!("Unknown exchange {}", exchange),
};
func(market_type, symbols, on_msg, duration);
}
pub fn crawl_l2_event<'a>(
exchange: &str,
market_type: MarketType,
symbols: &[String],
on_msg: Box<dyn FnMut(Message) + 'a>,
duration: Option<u64>,
) {
let func = match exchange {
"Binance" => crawlers::binance::crawl_l2_event,
"Bitfinex" => crawlers::bitfinex::crawl_l2_event,
"BitMEX" => crawlers::bitmex::crawl_l2_event,
"Bitstamp" => crawlers::bitstamp::crawl_l2_event,
"CoinbasePro" => crawlers::coinbase_pro::crawl_l2_event,
"Huobi" => crawlers::huobi::crawl_l2_event,
"Kraken" => crawlers::kraken::crawl_l2_event,
"MXC" => crawlers::mxc::crawl_l2_event,
"OKEx" => crawlers::okex::crawl_l2_event,
_ => panic!("Unknown exchange {}", exchange),
};
func(market_type, symbols, on_msg, duration);
}
pub fn crawl_l2_snapshot<'a>(
exchange: &str,
market_type: MarketType,
symbols: &[String],
on_msg: Box<dyn FnMut(Message) + 'a>,
duration: Option<u64>,
) {
let func = match exchange {
"Binance" => crawlers::binance::crawl_l2_snapshot,
"Bitfinex" => crawlers::bitfinex::crawl_l2_snapshot,
"BitMEX" => crawlers::bitmex::crawl_l2_snapshot,
"Bitstamp" => crawlers::bitstamp::crawl_l2_snapshot,
"CoinbasePro" => crawlers::coinbase_pro::crawl_l2_snapshot,
"Huobi" => crawlers::huobi::crawl_l2_snapshot,
"Kraken" => crawlers::kraken::crawl_l2_snapshot,
"MXC" => crawlers::mxc::crawl_l2_snapshot,
"OKEx" => crawlers::okex::crawl_l2_snapshot,
_ => panic!("Unknown exchange {}", exchange),
};
func(market_type, symbols, on_msg, duration);
}
pub fn crawl_l3_event<'a>(
exchange: &str,
market_type: MarketType,
symbols: &[String],
on_msg: Box<dyn FnMut(Message) + 'a>,
duration: Option<u64>,
) {
let func = match exchange {
"Binance" => panic!("Binance does NOT provide level3 orderbook data"),
"Bitfinex" => crawlers::bitfinex::crawl_l3_event,
"Bitstamp" => crawlers::bitstamp::crawl_l3_event,
"CoinbasePro" => crawlers::coinbase_pro::crawl_l3_event,
_ => panic!("Unknown exchange {}", exchange),
};
func(market_type, symbols, on_msg, duration);
}
pub fn crawl_l3_snapshot<'a>(
exchange: &str,
market_type: MarketType,
symbols: &[String],
on_msg: Box<dyn FnMut(Message) + 'a>,
duration: Option<u64>,
) {
let func = match exchange {
"Binance" => panic!("Binance does NOT provide level3 orderbook data"),
"Bitfinex" => crawlers::bitfinex::crawl_l3_snapshot,
"Bitstamp" => crawlers::bitstamp::crawl_l3_snapshot,
"CoinbasePro" => crawlers::coinbase_pro::crawl_l3_snapshot,
_ => panic!("Unknown exchange {}", exchange),
};
func(market_type, symbols, on_msg, duration);
}