use serde::{Deserialize, Serialize};
pub use crate::model::{
Asks, Bids, BookTickers, Filters, KlineSummaries, KlineSummary, RateLimit, ServerTime,
SymbolPrice, Tickers,
};
use crate::model::string_or_float;
#[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(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,
}