use anyhow::{Context, Result};
use std::env;
use tracing::info;
use binance_sdk::config::ConfigurationWebsocketApi;
use binance_sdk::logger;
use binance_sdk::spot::{
SpotWsApi,
websocket_api::{
OrderCancelReplaceCancelReplaceModeEnum, OrderCancelReplaceParams,
OrderCancelReplaceSideEnum, OrderCancelReplaceTypeEnum,
},
};
#[tokio::main]
async fn main() -> Result<()> {
logger::init();
let api_key = env::var("API_KEY").expect("API_KEY must be set in the environment");
let api_secret = env::var("API_SECRET").expect("API_SECRET must be set in the environment");
let ws_api_conf = ConfigurationWebsocketApi::builder()
.api_key(api_key)
.api_secret(api_secret)
.build()?;
let ws_api_client = SpotWsApi::production(ws_api_conf);
let connection = ws_api_client
.connect()
.await
.context("Failed to connect to WebSocket API")?;
let params = OrderCancelReplaceParams::builder(
"BNBUSDT".to_string(),
OrderCancelReplaceCancelReplaceModeEnum::StopOnFailure,
OrderCancelReplaceSideEnum::Buy,
OrderCancelReplaceTypeEnum::Market,
)
.build()?;
let response = connection
.order_cancel_replace(params)
.await
.context("order_cancel_replace request failed")?;
info!(?response.rate_limits, "order_cancel_replace rate limits");
let data = response.data()?;
info!(?data, "order_cancel_replace data");
connection
.disconnect()
.await
.context("Failed to disconnect WebSocket client")?;
Ok(())
}