forked from Igosuki/binance-rs-async
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinance_save_all_trades.rs
48 lines (40 loc) · 1.59 KB
/
binance_save_all_trades.rs
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
use csv::Writer;
use std::error::Error;
use std::fs::File;
use std::sync::atomic::AtomicBool;
use binance::websockets::*;
use binance::ws_model::WebsocketEvent;
#[tokio::main]
async fn main() { save_all_trades_websocket().await; }
async fn save_all_trades_websocket() {
struct WebSocketHandler {
wrt: Writer<File>,
}
impl WebSocketHandler {
pub fn new(local_wrt: Writer<File>) -> Self { WebSocketHandler { wrt: local_wrt } }
// serialize DayTickerEvent as CSV records
pub fn write_to_file(&mut self, events: Vec<WebsocketEvent>) -> Result<(), Box<dyn Error>> {
for event in events {
self.wrt.serialize(event)?;
}
Ok(())
}
}
let keep_running = AtomicBool::new(true); // Used to control the event loop
let file_path = std::path::Path::new("test.csv");
let local_wrt = csv::Writer::from_path(file_path).unwrap();
let mut web_socket_handler = WebSocketHandler::new(local_wrt);
let agg_trade: String = "!ticker@arr".to_string();
let mut web_socket: WebSockets<'_, Vec<WebsocketEvent>> = WebSockets::new(|events: Vec<WebsocketEvent>| {
// You can break the event_loop if some condition is met be setting keep_running to false
// keep_running.store(false, Ordering::Relaxed);
if let Err(error) = web_socket_handler.write_to_file(events) {
println!("{error}");
}
Ok(())
});
web_socket.connect(&agg_trade).await.unwrap(); // check error
if let Err(e) = web_socket.event_loop(&keep_running).await {
println!("Error: {e}");
}
}