use polynode::{
bbo_channel, book_channel, klines_channel, ticker_channel, trades_channel,
PerpsMessage, PolyNodeClient,
};
#[tokio::main]
async fn main() -> polynode::Result<()> {
let client = PolyNodeClient::new(
std::env::var("POLYNODE_API_KEY").expect("Set POLYNODE_API_KEY")
)?;
let mut perps = client.perps_stream().await?;
let ack = perps.subscribe(vec![
ticker_channel(),
bbo_channel("BTC-USD")?,
book_channel("BTC-USD")?,
trades_channel("BTC-USD")?,
klines_channel("BTC-USD", "1m")?,
]).await?;
if !ack.rejected.is_empty() {
eprintln!("rejected channels: {:?}", ack.rejected);
}
while let Some(message) = perps.next().await {
match message? {
PerpsMessage::Event(event) => println!("{event:?}"),
PerpsMessage::Reconnected(notice) => {
eprintln!("gap possible: {}", notice.gap_possible);
}
PerpsMessage::LagWarning(warning) => eprintln!("{warning:?}"),
PerpsMessage::Unknown { raw, decode_error } => {
println!("unknown: {raw} {decode_error:?}");
}
_ => {}
}
}
perps.close().await?;
Ok(())
}