use rust_decimal::Decimal;
use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ServerTime {
pub time_second: String,
pub time_nano: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InstrumentsInfo {
pub category: String,
pub list: Vec<InstrumentInfo>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct InstrumentInfo {
pub symbol: String,
#[serde(default)]
pub contract_type: String,
pub status: String,
#[serde(default)]
pub base_coin: String,
#[serde(default)]
pub quote_coin: String,
#[serde(default)]
pub settle_coin: String,
#[serde(default)]
pub launch_time: String,
#[serde(default)]
pub delivery_time: String,
#[serde(default)]
pub delivery_fee_rate: String,
#[serde(default)]
pub price_scale: String,
#[serde(default)]
pub leverage_filter: Option<LeverageFilter>,
#[serde(default)]
pub price_filter: Option<PriceFilter>,
#[serde(default)]
pub lot_size_filter: Option<LotSizeFilter>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LeverageFilter {
pub min_leverage: String,
pub max_leverage: String,
pub leverage_step: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PriceFilter {
pub min_price: String,
pub max_price: String,
pub tick_size: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LotSizeFilter {
#[serde(default)]
pub max_order_qty: String,
#[serde(default)]
pub min_order_qty: String,
#[serde(default)]
pub qty_step: String,
#[serde(default)]
pub post_only_max_order_qty: String,
#[serde(default)]
pub base_precision: String,
#[serde(default)]
pub quote_precision: String,
#[serde(default)]
pub min_order_amt: String,
#[serde(default)]
pub max_order_amt: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Orderbook {
pub s: String,
pub b: Vec<[String; 2]>,
pub a: Vec<[String; 2]>,
pub ts: u64,
pub u: u64,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Tickers {
pub category: String,
pub list: Vec<Ticker>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Ticker {
pub symbol: String,
#[serde(default)]
pub last_price: String,
#[serde(default)]
pub index_price: String,
#[serde(default)]
pub mark_price: String,
#[serde(default)]
pub prev_price_24h: String,
#[serde(default)]
pub price_24h_pcnt: String,
#[serde(default)]
pub high_price_24h: String,
#[serde(default)]
pub low_price_24h: String,
#[serde(default)]
pub prev_price_1h: String,
#[serde(default)]
pub open_interest: String,
#[serde(default)]
pub open_interest_value: String,
#[serde(default)]
pub turnover_24h: String,
#[serde(default)]
pub volume_24h: String,
#[serde(default)]
pub funding_rate: String,
#[serde(default)]
pub next_funding_time: String,
#[serde(default)]
pub bid_1_price: String,
#[serde(default)]
pub bid_1_size: String,
#[serde(default)]
pub ask_1_price: String,
#[serde(default)]
pub ask_1_size: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Klines {
pub category: String,
pub symbol: String,
pub list: Vec<Vec<String>>,
}
#[derive(Debug, Clone)]
pub struct Kline {
pub start_time: u64,
pub open: Decimal,
pub high: Decimal,
pub low: Decimal,
pub close: Decimal,
pub volume: Decimal,
pub turnover: Decimal,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FundingHistory {
pub category: String,
pub list: Vec<FundingRecord>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FundingRecord {
pub symbol: String,
pub funding_rate: String,
pub funding_rate_timestamp: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RecentTrades {
pub category: String,
pub list: Vec<Trade>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Trade {
pub exec_id: String,
pub symbol: String,
pub price: String,
pub size: String,
pub side: String,
pub time: String,
#[serde(default)]
pub is_block_trade: bool,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OpenInterest {
pub category: String,
pub symbol: String,
pub list: Vec<OpenInterestRecord>,
#[serde(default)]
pub next_page_cursor: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OpenInterestRecord {
pub open_interest: String,
pub timestamp: String,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RiskLimits {
pub category: String,
pub list: Vec<RiskLimit>,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RiskLimit {
pub id: i32,
pub symbol: String,
pub risk_limit_value: String,
pub maintenance_margin: String,
pub initial_margin: String,
pub max_leverage: String,
}