use serde::Deserialize;
use crate::NumberString;
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OrderBookUpdate {
#[serde(default)]
pub asks: Vec<BookLevel>,
#[serde(default)]
pub bids: Vec<BookLevel>,
#[serde(default)]
pub checksum: i64,
#[serde(default)]
pub ts: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(from = "BookLevelRaw")]
#[non_exhaustive]
pub struct BookLevel {
pub price: NumberString,
pub size: NumberString,
pub liquidated_order_count: NumberString,
pub order_count: NumberString,
}
type BookLevelRaw = (NumberString, NumberString, NumberString, NumberString);
impl From<BookLevelRaw> for BookLevel {
fn from(raw: BookLevelRaw) -> Self {
Self {
price: raw.0,
size: raw.1,
liquidated_order_count: raw.2,
order_count: raw.3,
}
}
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct AccountUpdate {
#[serde(default)]
pub total_eq: NumberString,
#[serde(default)]
pub adj_eq: NumberString,
#[serde(default)]
pub details: Vec<AccountBalanceUpdate>,
#[serde(default)]
pub u_time: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct AccountBalanceUpdate {
#[serde(default)]
pub ccy: String,
#[serde(default)]
pub eq: NumberString,
#[serde(default)]
pub cash_bal: NumberString,
#[serde(default)]
pub avail_bal: NumberString,
#[serde(default)]
pub frozen_bal: NumberString,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct OrderUpdate {
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub ord_id: String,
#[serde(default)]
pub cl_ord_id: String,
#[serde(default)]
pub state: String,
#[serde(default)]
pub px: NumberString,
#[serde(default)]
pub sz: NumberString,
}