use serde::Deserialize;
use super::ExtraFields;
use crate::model::NumberString;
ws_object! {
PositionUpdate {
inst_type: String,
mgn_mode: String,
pos_id: String,
pos_side: String,
pos: NumberString,
pos_ccy: String,
avail_pos: NumberString,
avg_px: NumberString,
non_settle_avg_px: NumberString,
upl: NumberString,
upl_ratio: NumberString,
upl_last_px: NumberString,
upl_ratio_last_px: NumberString,
lever: NumberString,
liq_px: NumberString,
mark_px: NumberString,
imr: NumberString,
margin: NumberString,
mgn_ratio: NumberString,
mmr: NumberString,
liab: NumberString,
liab_ccy: String,
interest: NumberString,
usd_px: NumberString,
hedged_pos: NumberString,
trade_id: String,
opt_val: NumberString,
pending_close_ord_liab_val: NumberString,
notional_usd: NumberString,
adl: String,
ccy: String,
last: NumberString,
idx_px: NumberString,
be_px: NumberString,
delta_bs: NumberString,
delta_pa: NumberString,
gamma_bs: NumberString,
gamma_pa: NumberString,
theta_bs: NumberString,
theta_pa: NumberString,
vega_bs: NumberString,
vega_pa: NumberString,
spot_in_use_amt: NumberString,
spot_in_use_ccy: String,
cl_spot_in_use_amt: NumberString,
max_spot_in_use_amt: NumberString,
biz_ref_id: String,
biz_ref_type: String,
inst_id: String,
c_time: NumberString,
u_time: NumberString,
p_time: NumberString
}
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BalanceAndPositionUpdate {
#[serde(default)]
pub p_time: NumberString,
pub event_type: String,
#[serde(default)]
pub bal_data: Vec<BalData>,
#[serde(default)]
pub pos_data: Vec<PosData>,
#[serde(default)]
pub trades: Vec<Trade>,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct BalData {
#[serde(default)]
pub ccy: String,
#[serde(default)]
pub cash_bal: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct PosData {
#[serde(default)]
pub pos_id: String,
#[serde(default)]
pub trade_id: String,
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub inst_type: String,
#[serde(default)]
pub mgn_mode: String,
#[serde(default)]
pub pos_side: String,
#[serde(default)]
pub pos: NumberString,
#[serde(default)]
pub ccy: String,
#[serde(default)]
pub pos_ccy: String,
#[serde(default)]
pub avg_px: NumberString,
#[serde(default)]
pub non_settle_avg_px: String,
#[serde(default)]
pub settled_pnl: String,
#[serde(default)]
pub u_time: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct Trade {
#[serde(default)]
pub inst_id: String,
#[serde(default)]
pub trade_id: String,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
ws_object! {
BalanceAndPositionBalance {
ccy: String,
cash_bal: NumberString,
u_time: NumberString
}
}
ws_object! {
BalanceAndPositionPosition {
pos_id: String,
trade_id: String,
inst_id: String,
inst_type: String,
mgn_mode: String,
pos_side: String,
pos: NumberString,
ccy: String,
pos_ccy: String,
avg_px: NumberString,
non_settle_avg_px: NumberString,
settled_pnl: NumberString,
u_time: NumberString
}
}
ws_object! {
BalanceAndPositionTrade {
inst_id: String,
trade_id: String
}
}
ws_object! {
LiquidationWarningUpdate {
inst_type: String,
inst_id: String,
pos_side: String,
pos: NumberString,
mgn_mode: String,
mgn_ratio: NumberString,
mark_px: NumberString,
liq_px: NumberString,
ccy: String,
u_time: NumberString,
p_time: NumberString
}
}
ws_object! {
AccountGreeksUpdate {
ccy: String,
delta_bs: NumberString,
delta_pa: NumberString,
gamma_bs: NumberString,
gamma_pa: NumberString,
theta_bs: NumberString,
theta_pa: NumberString,
vega_bs: NumberString,
vega_pa: NumberString,
ts: NumberString
}
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct AccountUpdate {
#[serde(default)]
pub adj_eq: NumberString,
#[serde(default)]
pub avail_eq: NumberString,
#[serde(default)]
pub borrow_froz: NumberString,
#[serde(default)]
pub delta: NumberString,
#[serde(default)]
pub delta_lever: NumberString,
#[serde(default)]
pub delta_neutral_status: String,
#[serde(default)]
pub details: Vec<AccountBalanceUpdate>,
#[serde(default)]
pub imr: NumberString,
#[serde(default)]
pub iso_eq: NumberString,
#[serde(default)]
pub mgn_ratio: NumberString,
#[serde(default)]
pub mmr: NumberString,
#[serde(default)]
pub notional_usd: NumberString,
#[serde(default)]
pub notional_usd_for_borrow: NumberString,
#[serde(default)]
pub notional_usd_for_futures: NumberString,
#[serde(default)]
pub notional_usd_for_option: NumberString,
#[serde(default)]
pub notional_usd_for_swap: NumberString,
#[serde(default)]
pub ord_froz: NumberString,
#[serde(default)]
pub total_eq: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(default)]
pub upl: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}
#[derive(Debug, Clone, Default, Deserialize)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub struct AccountBalanceUpdate {
#[serde(default)]
pub auto_lend_status: String,
#[serde(default)]
pub auto_lend_mt_amt: NumberString,
#[serde(default)]
pub avail_bal: NumberString,
#[serde(default)]
pub avail_eq: NumberString,
#[serde(default)]
pub borrow_froz: NumberString,
#[serde(default)]
pub cash_bal: NumberString,
#[serde(default)]
pub ccy: String,
#[serde(default)]
pub coin_usd_price: NumberString,
#[serde(default)]
pub cross_liab: NumberString,
#[serde(default)]
pub col_res: String,
#[serde(default)]
pub collateral_enabled: bool,
#[deprecated(note = "OKX deprecated collateralRestrict; use col_res instead")]
#[serde(default)]
pub collateral_restrict: bool,
#[serde(default)]
pub col_borr_auto_conversion: String,
#[serde(default)]
pub dis_eq: NumberString,
#[serde(default)]
pub eq: NumberString,
#[serde(default)]
pub eq_usd: NumberString,
#[serde(default)]
pub smt_sync_eq: NumberString,
#[serde(default)]
pub spot_copy_trading_eq: NumberString,
#[serde(default)]
pub fixed_bal: NumberString,
#[serde(default)]
pub frozen_bal: NumberString,
#[serde(default)]
pub frp_type: String,
#[serde(default)]
pub imr: NumberString,
#[serde(default)]
pub interest: NumberString,
#[serde(default)]
pub iso_eq: NumberString,
#[serde(default)]
pub iso_liab: NumberString,
#[serde(default)]
pub iso_upl: NumberString,
#[serde(default)]
pub liab: NumberString,
#[serde(default)]
pub max_loan: NumberString,
#[serde(default)]
pub mgn_ratio: NumberString,
#[serde(default)]
pub mmr: NumberString,
#[serde(default)]
pub notional_lever: NumberString,
#[serde(default)]
pub ord_frozen: NumberString,
#[serde(default)]
pub reward_bal: NumberString,
#[serde(default)]
pub spot_in_use_amt: NumberString,
#[serde(default)]
pub cl_spot_in_use_amt: NumberString,
#[serde(default)]
pub max_spot_in_use_amt: NumberString,
#[serde(default)]
pub spot_iso_bal: NumberString,
#[serde(default)]
pub stgy_eq: NumberString,
#[serde(default)]
pub twap: NumberString,
#[serde(default)]
pub u_time: NumberString,
#[serde(default)]
pub upl: NumberString,
#[serde(default)]
pub upl_liab: NumberString,
#[serde(default)]
pub spot_bal: NumberString,
#[serde(default)]
pub open_avg_px: NumberString,
#[serde(default)]
pub acc_avg_px: NumberString,
#[serde(default)]
pub spot_upl: NumberString,
#[serde(default)]
pub spot_upl_ratio: NumberString,
#[serde(default)]
pub total_pnl: NumberString,
#[serde(default)]
pub total_pnl_ratio: NumberString,
#[serde(flatten, default)]
pub extra: ExtraFields,
}