use crate::client::Client;
use crate::websocket::{WebSocketClient, Channel};
use std::sync::Arc;
pub struct ApiWebSocket;
impl ApiWebSocket {
pub async fn subscribe_heartbeats<'a>(
client: &Arc<Client<'a>>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::Heartbeats, None, false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_candles<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::Candles, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_status<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::Status, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_ticker<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::Ticker, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_ticker_batch<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::TickerBatch, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_level2<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::Level2, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_market_trades<'a>(
client: &Arc<Client<'a>>,
product_ids: Vec<String>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_market_data().await?;
ws_client
.subscribe(Channel::MarketTrades, Some(product_ids), false)
.await?;
Ok(ws_client)
}
pub async fn subscribe_user<'a>(
client: &Arc<Client<'a>>,
product_ids: Option<Vec<String>>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_user_data().await?;
ws_client.subscribe(Channel::User, product_ids, true).await?;
Ok(ws_client)
}
pub async fn subscribe_futures_balance_summary<'a>(
client: &Arc<Client<'a>>,
) -> Result<WebSocketClient<'a>, Box<dyn std::error::Error>> {
let mut ws_client = WebSocketClient::new(client.clone());
ws_client.connect_user_data().await?;
ws_client
.subscribe(Channel::FuturesBalanceSummary, None, true)
.await?;
Ok(ws_client)
}
}