use structopt::StructOpt;
use tracing::Level;
use tracing_subscriber::util::SubscriberInitExt;
use ws_tool::{codec::AsyncWsStringCodec, ClientBuilder};
#[derive(StructOpt)]
struct Args {
channels: Vec<String>,
#[structopt(long)]
proxy: Option<String>,
}
#[tokio::main]
async fn main() -> Result<(), ()> {
tracing_subscriber::fmt::fmt()
.with_max_level(Level::INFO)
.finish()
.try_init()
.expect("failed to init log");
let args = Args::from_args();
let channels = args.channels.join("/");
let mut builder = ClientBuilder::new(&format!(
"wss://fstream.binance.com/stream?streams={}",
channels
));
if let Some(proxy) = args.proxy {
builder = builder.proxy(&proxy)
}
let mut client = builder
.async_connect(AsyncWsStringCodec::check_fn)
.await
.unwrap();
while let Ok(msg) = client.receive().await {
println!("{}", msg.data.trim());
}
Ok(())
}