use serde::{Deserialize, Serialize};
use crate::model::{string_or_float, string_or_float_opt, string_or_bool};
pub use crate::model::{
Asks, Bids, BookTickers, Filters, KlineSummaries, KlineSummary, RateLimit, ServerTime,
SymbolPrice, Tickers,
};
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ExchangeInformation {
pub timezone: String,
pub server_time: u64,
pub rate_limits: Vec<RateLimit>,
pub exchange_filters: Vec<String>,
pub symbols: Vec<Symbol>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Symbol {
pub symbol: String,
pub status: String,
pub maint_margin_percent: String,
pub required_margin_percent: String,
pub base_asset: String,
pub quote_asset: String,
pub price_precision: u16,
pub quantity_precision: u16,
pub base_asset_precision: u64,
pub quote_precision: u64,
pub filters: Vec<Filters>,
pub order_types: Vec<String>,
pub time_in_force: Vec<String>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct OrderBook {
pub last_update_id: u64,
#[serde(rename = "E")]
pub event_time: u64,
#[serde(rename = "T")]
pub trade_order_time: u64,
pub bids: Vec<Bids>,
pub asks: Vec<Asks>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct PriceStats {
pub symbol: String,
pub price_change: String,
pub price_change_percent: String,
pub weighted_avg_price: String,
#[serde(with = "string_or_float")]
pub last_price: f64,
#[serde(with = "string_or_float")]
pub open_price: f64,
#[serde(with = "string_or_float")]
pub high_price: f64,
#[serde(with = "string_or_float")]
pub low_price: f64,
#[serde(with = "string_or_float")]
pub volume: f64,
#[serde(with = "string_or_float")]
pub quote_volume: f64,
#[serde(with = "string_or_float")]
pub last_qty: f64,
pub open_time: u64,
pub close_time: u64,
pub first_id: u64,
pub last_id: u64,
pub count: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct TradeHistory {
pub buyer: bool,
#[serde(with = "string_or_float")]
pub commission: f64,
pub commission_asset: String,
pub id: u64,
pub maker: bool,
pub order_id: u64,
#[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(with = "string_or_float")]
pub realized_pnl: f64,
pub side: String,
pub position_side: String,
pub symbol: String,
pub time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum Trades {
AllTrades(Vec<Trade>),
}
#[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,
pub time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum AggTrades {
AllAggTrades(Vec<AggTrade>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AggTrade {
#[serde(rename = "T")]
pub time: u64,
#[serde(rename = "a")]
pub agg_id: u64,
#[serde(rename = "f")]
pub first_id: u64,
#[serde(rename = "l")]
pub last_id: u64,
#[serde(rename = "m")]
pub maker: bool,
#[serde(rename = "p", with = "string_or_float")]
pub price: f64,
#[serde(rename = "q", with = "string_or_float")]
pub qty: f64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum MarkPrices {
AllMarkPrices(Vec<MarkPrice>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct MarkPrice {
pub symbol: String,
#[serde(with = "string_or_float")]
pub mark_price: f64,
#[serde(with = "string_or_float")]
pub last_funding_rate: f64,
pub next_funding_time: u64,
pub time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(untagged)]
pub enum LiquidationOrders {
AllLiquidationOrders(Vec<LiquidationOrder>),
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct LiquidationOrder {
#[serde(with = "string_or_float")]
pub average_price: f64,
#[serde(with = "string_or_float")]
pub executed_qty: f64,
#[serde(with = "string_or_float")]
pub orig_qty: f64,
#[serde(with = "string_or_float")]
pub price: f64,
pub side: String,
pub status: String,
pub symbol: String,
pub time: u64,
pub time_in_force: String,
pub r#type: String,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct OpenInterest {
#[serde(with = "string_or_float")]
pub open_interest: f64,
pub symbol: String,
}
#[derive(Debug, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct OpenInterestHist {
pub symbol: String,
pub sum_open_interest: String,
pub sum_open_interest_value: String,
pub timestamp: u64,
}
#[derive(Debug, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Order {
pub client_order_id: String,
#[serde(with = "string_or_float", default = "default_stop_price")]
pub cum_qty: f64,
#[serde(with = "string_or_float")]
pub cum_quote: f64,
#[serde(with = "string_or_float")]
pub executed_qty: f64,
pub order_id: u64,
#[serde(with = "string_or_float")]
pub avg_price: f64,
#[serde(with = "string_or_float")]
pub orig_qty: f64,
#[serde(with = "string_or_float")]
pub price: f64,
pub side: String,
pub reduce_only: bool,
pub position_side: String,
pub status: String,
#[serde(with = "string_or_float", default = "default_stop_price")]
pub stop_price: f64,
pub close_position: bool,
pub symbol: String,
pub time_in_force: String,
#[serde(rename = "type")]
pub order_type: String,
pub orig_type: String,
#[serde(with = "string_or_float", default = "default_activation_price")]
pub activation_price: f64,
#[serde(with = "string_or_float", default = "default_price_rate")]
pub price_rate: f64,
pub update_time: u64,
pub working_type: String,
pub price_protect: bool,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Transaction {
pub client_order_id: String,
#[serde(with = "string_or_float")]
pub cum_qty: f64,
#[serde(with = "string_or_float")]
pub cum_quote: f64,
#[serde(with = "string_or_float")]
pub executed_qty: f64,
pub order_id: u64,
#[serde(with = "string_or_float")]
pub avg_price: f64,
#[serde(with = "string_or_float")]
pub orig_qty: f64,
pub reduce_only: bool,
pub side: String,
pub position_side: String,
pub status: String,
#[serde(with = "string_or_float")]
pub stop_price: f64,
pub close_position: bool,
pub symbol: String,
pub time_in_force: String,
#[serde(rename = "type")]
pub type_name: String,
pub orig_type: String,
#[serde(default)]
#[serde(with = "string_or_float_opt")]
pub activate_price: Option<f64>,
#[serde(default)]
#[serde(with = "string_or_float_opt")]
pub price_rate: Option<f64>,
pub update_time: u64,
pub working_type: String,
price_protect: bool,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct CanceledOrder {
pub client_order_id: String,
#[serde(with = "string_or_float")]
pub cum_qty: f64,
#[serde(with = "string_or_float")]
pub cum_quote: f64,
#[serde(with = "string_or_float")]
pub executed_qty: f64,
pub order_id: u64,
#[serde(with = "string_or_float")]
pub orig_qty: f64,
pub orig_type: String,
#[serde(with = "string_or_float")]
pub price: f64,
pub reduce_only: bool,
pub side: String,
pub position_side: String,
pub status: String,
#[serde(with = "string_or_float")]
pub stop_price: f64,
pub close_position: bool,
pub symbol: String,
pub time_in_force: String,
#[serde(rename = "type")]
pub type_name: String,
#[serde(default)]
#[serde(with = "string_or_float_opt")]
pub activate_price: Option<f64>,
#[serde(default)]
#[serde(with = "string_or_float_opt")]
pub price_rate: Option<f64>,
pub update_time: u64,
pub working_type: String,
price_protect: bool,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct PositionRisk {
#[serde(with = "string_or_float")]
pub entry_price: f64,
pub margin_type: String,
#[serde(with = "string_or_bool")]
pub is_auto_add_margin: bool,
#[serde(with = "string_or_float")]
pub isolated_margin: f64,
pub leverage: String,
#[serde(with = "string_or_float")]
pub liquidation_price: f64,
#[serde(with = "string_or_float")]
pub mark_price: f64,
#[serde(with = "string_or_float")]
pub max_notional_value: f64,
#[serde(with = "string_or_float", rename = "positionAmt")]
pub position_amount: f64,
pub symbol: String,
#[serde(with = "string_or_float", rename = "unRealizedProfit")]
pub unrealized_profit: f64,
pub position_side: String,
#[serde(with = "string_or_float")]
pub notional: f64,
#[serde(with = "string_or_float")]
pub isolated_wallet: f64,
pub update_time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct FuturesAsset {
pub asset: String,
#[serde(with = "string_or_float")]
pub wallet_balance: f64,
#[serde(with = "string_or_float")]
pub unrealized_profit: f64,
#[serde(with = "string_or_float")]
pub margin_balance: f64,
#[serde(with = "string_or_float")]
pub maint_margin: f64,
#[serde(with = "string_or_float")]
pub initial_margin: f64,
#[serde(with = "string_or_float")]
pub position_initial_margin: f64,
#[serde(with = "string_or_float")]
pub open_order_initial_margin: f64,
#[serde(with = "string_or_float")]
pub max_withdraw_amount: f64,
#[serde(with = "string_or_float")]
pub cross_wallet_balance: f64,
#[serde(with = "string_or_float")]
pub cross_un_pnl: f64,
#[serde(with = "string_or_float")]
pub available_balance: f64,
#[serde(with = "string_or_bool")]
pub margin_available: bool,
pub update_time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct FuturesPosition {
pub symbol: String,
#[serde(with = "string_or_float")]
pub initial_margin: f64,
#[serde(with = "string_or_float")]
pub maint_margin: f64,
#[serde(with = "string_or_float")]
pub unrealized_profit: f64,
#[serde(with = "string_or_float")]
pub position_initial_margin: f64,
#[serde(with = "string_or_float")]
pub open_order_initial_margin: f64,
pub leverage: String,
#[serde(with = "string_or_bool")]
pub isolated: bool,
#[serde(with = "string_or_float")]
pub entry_price: f64,
#[serde(with = "string_or_float")]
pub max_notional: f64,
pub position_side: String,
#[serde(with = "string_or_float", rename = "positionAmt")]
pub position_amount: f64,
#[serde(with = "string_or_float")]
pub notional: f64,
#[serde(with = "string_or_float")]
pub isolated_wallet: f64,
pub update_time: u64,
#[serde(with = "string_or_float")]
pub bid_notional: f64,
#[serde(with = "string_or_float")]
pub ask_notional: f64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AccountInformation {
#[serde(with = "string_or_float")]
pub fee_tier: f64,
#[serde(with = "string_or_bool")]
pub can_trade: bool,
#[serde(with = "string_or_bool")]
pub can_deposit: bool,
#[serde(with = "string_or_bool")]
pub can_withdraw: bool,
#[serde(with = "string_or_float")]
pub update_time: f64,
#[serde(with = "string_or_float")]
pub total_initial_margin: f64,
#[serde(with = "string_or_float")]
pub total_maint_margin: f64,
#[serde(with = "string_or_float")]
pub total_wallet_balance: f64,
#[serde(with = "string_or_float")]
pub total_unrealized_profit: f64,
#[serde(with = "string_or_float")]
pub total_margin_balance: f64,
#[serde(with = "string_or_float")]
pub total_position_initial_margin: f64,
#[serde(with = "string_or_float")]
pub total_open_order_initial_margin: f64,
#[serde(with = "string_or_float")]
pub total_cross_wallet_balance: f64,
#[serde(with = "string_or_float")]
pub total_cross_un_pnl: f64,
#[serde(with = "string_or_float")]
pub available_balance: f64,
#[serde(with = "string_or_float")]
pub max_withdraw_amount: f64,
pub assets: Vec<FuturesAsset>,
pub positions: Vec<FuturesPosition>,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct AccountBalance {
pub account_alias: String,
pub asset: String,
#[serde(with = "string_or_float")]
pub balance: f64,
#[serde(with = "string_or_float")]
pub cross_wallet_balance: f64,
#[serde(with = "string_or_float", rename = "crossUnPnl")]
pub cross_unrealized_pnl: f64,
#[serde(with = "string_or_float")]
pub available_balance: f64,
#[serde(with = "string_or_float")]
pub max_withdraw_amount: f64,
pub margin_available: bool,
pub update_time: u64,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ChangeLeverageResponse {
pub leverage: u8,
#[serde(with = "string_or_float")]
pub max_notional_value: f64,
pub symbol: String,
}
fn default_stop_price() -> f64 {
0.0
}
fn default_activation_price() -> f64 {
0.0
}
fn default_price_rate() -> f64 {
0.0
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct OrderUpdate {
#[serde(rename = "s")]
pub symbol: String,
#[serde(rename = "c")]
pub new_client_order_id: String,
#[serde(rename = "S")]
pub side: String,
#[serde(rename = "o")]
pub order_type: String,
#[serde(rename = "f")]
pub time_in_force: String,
#[serde(rename = "q")]
pub qty: String,
#[serde(rename = "p")]
pub price: String,
#[serde(rename = "ap")]
pub average_price: String,
#[serde(rename = "sp")]
pub stop_price: String,
#[serde(rename = "x")]
pub execution_type: String,
#[serde(rename = "X")]
pub order_status: String,
#[serde(rename = "i")]
pub order_id: u64,
#[serde(rename = "l")]
pub qty_last_filled_trade: String,
#[serde(rename = "z")]
pub accumulated_qty_filled_trades: String,
#[serde(rename = "L")]
pub price_last_filled_trade: String,
#[serde(skip, rename = "N")]
pub asset_commisioned: Option<String>,
#[serde(rename = "n")]
pub commission: Option<String>,
#[serde(rename = "T")]
pub trade_order_time: u64,
#[serde(rename = "t")]
pub trade_id: i64,
#[serde(rename = "b")]
pub bids_notional: String,
#[serde(rename = "a")]
pub ask_notional: String,
#[serde(rename = "m")]
pub is_buyer_maker: bool,
#[serde(rename = "R")]
pub is_reduce_only: bool,
#[serde(rename = "wt")]
pub stop_price_working_type: String,
#[serde(rename = "ot")]
pub original_order_type: String,
#[serde(rename = "ps")]
pub position_side: String,
#[serde(rename = "cp")]
pub close_all: Option<bool>,
#[serde(rename = "AP")]
pub activation_price: Option<String>,
#[serde(rename = "cr")]
pub callback_rate: Option<String>,
#[serde(rename = "pP")]
pub pp_ignore: bool,
#[serde(rename = "si")]
pub si_ignore: i32,
#[serde(rename = "ss")]
pub ss_ignore: i32,
#[serde(rename = "rp")]
pub realized_profit: String,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct OrderTradeEvent {
#[serde(rename = "e")]
pub event_type: String,
#[serde(rename = "E")]
pub event_time: u64,
#[serde(rename = "T")]
pub transaction_time: u64,
#[serde(rename = "o")]
pub order: OrderUpdate,
}
#[derive(Debug, Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Income {
pub symbol: String,
pub income_type: String,
#[serde(with = "string_or_float")]
pub income: f64,
pub asset: String,
pub info: String,
pub time: u64,
pub tran_id: u64,
pub trade_id: String,
}