#![allow(dead_code)]
use binance::api::*;
use binance::userstream::*;
use binance::websockets::*;
use std::sync::atomic::{AtomicBool, Ordering};
fn main() {
}
fn user_stream() {
let api_key_user = Some("YOUR_API_KEY".into());
let user_stream: UserStream = Binance::new(api_key_user, None);
if let Ok(answer) = user_stream.start() {
println!("Data Stream Started ...");
let listen_key = answer.listen_key;
match user_stream.keep_alive(&listen_key) {
Ok(msg) => println!("Keepalive user data stream: {:?}", msg),
Err(e) => println!("Error: {}", e),
}
match user_stream.close(&listen_key) {
Ok(msg) => println!("Close user data stream: {:?}", msg),
Err(e) => println!("Error: {}", e),
}
} else {
println!("Not able to start an User Stream (Check your API_KEY)");
}
}
fn user_stream_websocket() {
let keep_running = AtomicBool::new(true); let api_key_user = Some("YOUR_KEY".into());
let user_stream: UserStream = Binance::new(api_key_user, None);
if let Ok(answer) = user_stream.start() {
let listen_key = answer.listen_key;
let mut web_socket: WebSockets<'_> = WebSockets::new(|event: WebsocketEvent| {
match event {
WebsocketEvent::AccountUpdate(account_update) => {
for balance in &account_update.data.balances {
println!(
"Asset: {}, wallet_balance: {}, cross_wallet_balance: {}, balance: {}",
balance.asset,
balance.wallet_balance,
balance.cross_wallet_balance,
balance.balance_change
);
}
}
WebsocketEvent::OrderTrade(trade) => {
println!(
"Symbol: {}, Side: {}, Price: {}, Execution Type: {}",
trade.symbol, trade.side, trade.price, trade.execution_type
);
}
_ => (),
};
Ok(())
});
web_socket.connect(&listen_key).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
user_stream.close(&listen_key).unwrap();
web_socket.disconnect().unwrap();
println!("Userstrem closed and disconnected");
} else {
println!("Not able to start an User Stream (Check your API_KEY)");
}
}
fn market_websocket() {
let keep_running = AtomicBool::new(true); let agg_trade = String::from("ethbtc@aggTrade");
let mut web_socket: WebSockets<'_> = WebSockets::new(|event: WebsocketEvent| {
match event {
WebsocketEvent::Trade(trade) => {
println!(
"Symbol: {}, price: {}, qty: {}",
trade.symbol, trade.price, trade.qty
);
}
WebsocketEvent::DepthOrderBook(depth_order_book) => {
println!(
"Symbol: {}, Bids: {:?}, Ask: {:?}",
depth_order_book.symbol, depth_order_book.bids, depth_order_book.asks
);
}
WebsocketEvent::OrderBook(order_book) => {
println!(
"last_update_id: {}, Bids: {:?}, Ask: {:?}",
order_book.last_update_id, order_book.bids, order_book.asks
);
}
_ => (),
};
Ok(())
});
web_socket.connect(&agg_trade).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
web_socket.disconnect().unwrap();
println!("disconnected");
}
fn all_trades_websocket() {
let keep_running = AtomicBool::new(true); let agg_trade = String::from("!ticker@arr");
let mut web_socket = WebSockets::new(|event: WebsocketEvent| {
if let WebsocketEvent::DayTickerAll(ticker_events) = event {
for tick_event in ticker_events {
println!(
"Symbol: {}, price: {}, qty: {}",
tick_event.symbol, tick_event.best_bid, tick_event.best_bid_qty
);
}
}
Ok(())
});
web_socket.connect(&agg_trade).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
web_socket.disconnect().unwrap();
println!("disconnected");
}
fn kline_websocket() {
let keep_running = AtomicBool::new(true);
let kline = String::from("ethbtc@kline_1m");
let mut web_socket = WebSockets::new(|event: WebsocketEvent| {
if let WebsocketEvent::Kline(kline_event) = event {
println!(
"Symbol: {}, high: {}, low: {}",
kline_event.kline.symbol, kline_event.kline.low, kline_event.kline.high
);
}
Ok(())
});
web_socket.connect(&kline).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
web_socket.disconnect().unwrap();
println!("disconnected");
}
fn last_price_for_one_symbol() {
let keep_running = AtomicBool::new(true);
let agg_trade = String::from("btcusdt@ticker");
let mut btcusdt: f32 = "0".parse().unwrap();
let mut web_socket = WebSockets::new(|event: WebsocketEvent| {
if let WebsocketEvent::DayTicker(ticker_event) = event {
btcusdt = ticker_event.average_price.parse().unwrap();
let btcusdt_close: f32 = ticker_event.current_close.parse().unwrap();
println!("{} - {}", btcusdt, btcusdt_close);
if btcusdt_close as i32 == 7000 {
keep_running.store(false, Ordering::Relaxed);
}
}
Ok(())
});
web_socket.connect(&agg_trade).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
web_socket.disconnect().unwrap();
println!("disconnected");
}
fn multiple_streams() {
let endpoints =
["ETHBTC", "BNBETH"].map(|symbol| format!("{}@depth@100ms", symbol.to_lowercase()));
let keep_running = AtomicBool::new(true);
let mut web_socket = WebSockets::new(|event: WebsocketEvent| {
if let WebsocketEvent::DepthOrderBook(depth_order_book) = event {
println!("{:?}", depth_order_book);
}
Ok(())
});
web_socket.connect_multiple_streams(&endpoints).unwrap(); if let Err(e) = web_socket.event_loop(&keep_running) {
println!("Error: {}", e);
}
web_socket.disconnect().unwrap();
}