diff --git a/src/futures/model.rs b/src/futures/model.rs index e6debac4..dfbf18d9 100644 --- a/src/futures/model.rs +++ b/src/futures/model.rs @@ -110,17 +110,29 @@ pub enum Trades { #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Trade { - pub id: u64, - pub is_buyer_maker: bool, - #[serde(with = "string_or_float")] - pub price: f64, - #[serde(with = "string_or_float")] - pub qty: f64, - #[serde(with = "string_or_float")] - pub quote_qty: f64, + #[serde(rename = "T")] pub time: u64, + + #[serde(rename = "s")] + pub symbol: String, + + #[serde(rename = "t")] + pub transaction_id: i64, + + #[serde(rename = "p", with = "string_or_float")] + pub price: f64, + + #[serde(rename = "q", with = "string_or_float")] + pub quantity: f64, + + #[serde(rename = "X")] + pub order_type: String, + + #[serde(rename = "m")] + pub is_buyer_maker: bool, } + #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(untagged)] pub enum AggTrades { @@ -612,6 +624,8 @@ pub struct OrderTradeEvent { pub order: OrderUpdate, } + + #[derive(Debug, Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub struct Income { diff --git a/src/futures/websockets.rs b/src/futures/websockets.rs index 323f0455..08670829 100755 --- a/src/futures/websockets.rs +++ b/src/futures/websockets.rs @@ -3,7 +3,7 @@ use crate::config::Config; use crate::model::{ AccountUpdateEvent, AggrTradesEvent, BookTickerEvent, ContinuousKlineEvent, DayTickerEvent, DepthOrderBookEvent, IndexKlineEvent, IndexPriceEvent, KlineEvent, LiquidationEvent, - MarkPriceEvent, MiniTickerEvent, OrderBook, TradeEvent, UserDataStreamExpiredEvent, + MarkPriceEvent, MiniTickerEvent, OrderBook, UserDataStreamExpiredEvent, }; use crate::futures::model; use error_chain::bail; @@ -16,6 +16,8 @@ use tungstenite::protocol::WebSocket; use tungstenite::stream::MaybeTlsStream; use tungstenite::handshake::client::Response; +use super::model::Trade; + #[allow(clippy::all)] enum FuturesWebsocketAPI { Default, @@ -55,7 +57,7 @@ pub enum FuturesWebsocketEvent { AccountUpdate(AccountUpdateEvent), OrderTrade(model::OrderTradeEvent), AggrTrades(AggrTradesEvent), - Trade(TradeEvent), + Trade(Trade), OrderBook(OrderBook), DayTicker(DayTickerEvent), MiniTicker(MiniTickerEvent), @@ -92,7 +94,7 @@ enum FuturesEvents { IndexPriceEvent(IndexPriceEvent), MarkPriceEvent(MarkPriceEvent), VecMarkPriceEvent(Vec), - TradeEvent(TradeEvent), + TradeEvent(Trade), KlineEvent(KlineEvent), ContinuousKlineEvent(ContinuousKlineEvent), IndexKlineEvent(IndexKlineEvent), diff --git a/src/general.rs b/src/general.rs index 357356b2..f5fb08e0 100644 --- a/src/general.rs +++ b/src/general.rs @@ -1,10 +1,11 @@ use error_chain::bail; - +use crate::util::build_request; use crate::model::{Empty, ExchangeInformation, ServerTime, Symbol}; use crate::client::Client; use crate::errors::Result; use crate::api::API; use crate::api::Spot; +use std::collections::BTreeMap; #[derive(Clone)] pub struct General { @@ -29,6 +30,20 @@ impl General { self.client.get(API::Spot(Spot::ExchangeInfo), None) } + + + // Obtain exchange information with permissions + // - Current exchange trading rules and symbol information + pub fn exchange_info_permission(&self, permission : S) -> Result + where + S: Into, + { + let mut parameters: BTreeMap = BTreeMap::new(); + parameters.insert("permissions".into(), permission.into()); + let request = build_request(parameters); + self.client.get(API::Spot(Spot::ExchangeInfo), Some(request)) + } + // Get Symbol information pub fn get_symbol_info(&self, symbol: S) -> Result where diff --git a/src/model.rs b/src/model.rs index baedc33f..6f2f3a6e 100644 --- a/src/model.rs +++ b/src/model.rs @@ -55,6 +55,11 @@ pub enum Filters { max_price: String, tick_size: String, }, + #[serde(rename = "POSITION_RISK_CONTROL")] + #[serde(rename_all = "camelCase")] + PositionRiskControl { + }, + #[serde(rename = "PERCENT_PRICE")] #[serde(rename_all = "camelCase")] PercentPrice { @@ -137,6 +142,7 @@ pub struct AccountInformation { pub can_withdraw: bool, pub can_deposit: bool, pub balances: Vec, + pub permissions: Vec, } #[derive(Debug, Serialize, Deserialize, Clone)]