use serde::{Deserialize, Serialize};
use crate::futures::models::de;
#[derive(Debug, Deserialize)]
pub struct Balance {
#[serde(rename = "accountAlias", default)]
pub account_alias: String,
pub asset: String,
#[serde(rename = "walletBalance", alias = "balance")]
pub wallet_balance: String,
#[serde(rename = "crossWalletBalance")]
pub cross_wallet_balance: String,
#[serde(rename = "crossUnPnl")]
pub cross_unpnl: String,
#[serde(rename = "availableBalance")]
pub available_balance: String,
#[serde(rename = "maxWithdrawAmount")]
pub max_withdraw_amount: String,
#[serde(rename = "marginAvailable", default)]
pub margin_available: bool,
#[serde(rename = "updateTime")]
pub update_time: u64,
}
#[derive(Debug, Deserialize)]
pub struct PositionSideDualResponse {
#[serde(rename = "dualSidePosition")]
pub dual_side_position: bool,
}
#[derive(Debug, Deserialize)]
pub struct LeverageBracket {
pub symbol: String,
pub brackets: Vec<Bracket>,
}
#[derive(Debug, Deserialize)]
pub struct Bracket {
pub bracket: u32,
#[serde(rename = "initialLeverage")]
pub initial_leverage: u32,
#[serde(rename = "notionalCap", deserialize_with = "de::string_or_number")]
pub notional_cap: String,
#[serde(rename = "notionalFloor", deserialize_with = "de::string_or_number")]
pub notional_floor: String,
#[serde(rename = "maintMarginRatio", deserialize_with = "de::string_or_number")]
pub maint_margin_ratio: String,
#[serde(deserialize_with = "de::string_or_number")]
pub cum: String,
}
#[derive(Debug, Deserialize)]
pub struct SetLeverageResponse {
pub leverage: u32,
#[serde(rename = "maxNotionalValue")]
pub max_notional_value: String,
pub symbol: String,
}
#[derive(Debug, Deserialize)]
pub struct CancelAllResponse {
pub code: i64,
pub msg: String,
}
#[derive(Debug, Deserialize)]
pub struct BatchOrderResult {
#[serde(rename = "orderId")]
pub order_id: Option<i64>,
pub code: Option<i64>,
pub msg: Option<String>,
pub symbol: Option<String>,
pub status: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct StatusMsgResponse {
pub code: i64,
pub msg: String,
}
#[derive(Debug, Deserialize)]
pub struct MmpResponse {
pub symbol: String,
#[serde(rename = "windowTimeInMilliseconds")]
pub window_time_ms: u64,
#[serde(rename = "frozenTimeInMilliseconds")]
pub frozen_time_ms: u64,
#[serde(rename = "qtyLimit", default)]
pub qty_limit: Option<i64>,
#[serde(rename = "valueLimit", default)]
pub value_limit: Option<i64>,
#[serde(rename = "deltaLimit", default)]
pub delta_limit: Option<i64>,
}
#[derive(Debug)]
pub struct MmpUpdateParams {
pub symbol: String,
pub window_time_ms: u64,
pub frozen_time_ms: u64,
pub qty_limit: Option<u64>,
pub value_limit: Option<u64>,
pub delta_limit: Option<u64>,
}
#[derive(Debug, Serialize)]
pub struct WalletTransferParams {
pub asset: String,
pub amount: String,
#[serde(rename = "type")]
pub transfer_type: u32,
}
#[derive(Debug, Deserialize)]
pub struct WalletTransferResponse {
#[serde(rename = "tranId")]
pub tran_id: i64,
#[serde(default)]
pub status: String,
}
#[derive(Debug, Deserialize)]
pub struct AdlQuantileResponse {
pub symbol: String,
#[serde(rename = "adlQuantile")]
pub adl_quantile: serde_json::Value,
}
#[derive(Debug, Deserialize)]
pub struct CommissionRateResponse {
pub symbol: String,
#[serde(rename = "makerCommissionRate")]
pub maker_commission_rate: String,
#[serde(rename = "takerCommissionRate")]
pub taker_commission_rate: String,
}
#[derive(Debug, Deserialize)]
pub struct MultiAssetsModeResponse {
#[serde(rename = "multiAssetsMargin")]
pub multi_assets_margin: bool,
}
#[derive(Debug, Deserialize)]
pub struct AccountInfoResponse {
#[serde(rename = "feeTier")]
pub fee_tier: u32,
#[serde(rename = "canTrade")]
pub can_trade: bool,
#[serde(rename = "canDeposit")]
pub can_deposit: bool,
#[serde(rename = "canWithdraw")]
pub can_withdraw: bool,
#[serde(rename = "updateTime")]
pub update_time: u64,
#[serde(rename = "totalInitialMargin")]
pub total_initial_margin: String,
#[serde(rename = "totalMaintMargin")]
pub total_maint_margin: String,
#[serde(rename = "totalWalletBalance")]
pub total_wallet_balance: String,
#[serde(rename = "totalUnrealizedProfit")]
pub total_unrealized_profit: String,
#[serde(rename = "totalMarginBalance")]
pub total_margin_balance: String,
#[serde(rename = "totalPositionInitialMargin")]
pub total_position_initial_margin: String,
#[serde(rename = "totalOpenOrderInitialMargin")]
pub total_open_order_initial_margin: String,
#[serde(rename = "totalCrossWalletBalance")]
pub total_cross_wallet_balance: String,
#[serde(rename = "totalCrossUnPnl")]
pub total_cross_unpnl: String,
#[serde(rename = "availableBalance")]
pub available_balance: String,
#[serde(rename = "maxWithdrawAmount")]
pub max_withdraw_amount: String,
pub assets: Vec<AccountAsset>,
pub positions: Vec<AccountPosition>,
}
#[derive(Debug, Deserialize)]
pub struct AccountAsset {
pub asset: String,
#[serde(rename = "walletBalance")]
pub wallet_balance: String,
#[serde(rename = "unrealizedProfit")]
pub unrealized_profit: String,
#[serde(rename = "marginBalance")]
pub margin_balance: String,
#[serde(rename = "maintMargin")]
pub maint_margin: String,
#[serde(rename = "initialMargin")]
pub initial_margin: String,
#[serde(rename = "positionInitialMargin")]
pub position_initial_margin: String,
#[serde(rename = "openOrderInitialMargin")]
pub open_order_initial_margin: String,
#[serde(rename = "crossWalletBalance")]
pub cross_wallet_balance: String,
#[serde(rename = "crossUnPnl")]
pub cross_unpnl: String,
#[serde(rename = "availableBalance")]
pub available_balance: String,
#[serde(rename = "maxWithdrawAmount")]
pub max_withdraw_amount: String,
#[serde(rename = "marginAvailable", default)]
pub margin_available: bool,
#[serde(rename = "updateTime")]
pub update_time: u64,
}
#[derive(Debug, Deserialize)]
pub struct AccountPosition {
pub symbol: String,
#[serde(rename = "initialMargin")]
pub initial_margin: String,
#[serde(rename = "maintMargin")]
pub maint_margin: String,
#[serde(rename = "unrealizedProfit")]
pub unrealized_profit: String,
#[serde(rename = "positionInitialMargin")]
pub position_initial_margin: String,
#[serde(rename = "openOrderInitialMargin")]
pub open_order_initial_margin: String,
pub leverage: String,
pub isolated: bool,
#[serde(rename = "entryPrice")]
pub entry_price: String,
#[serde(rename = "maxNotional")]
pub max_notional: String,
#[serde(rename = "positionSide")]
pub position_side: String,
#[serde(rename = "positionAmt")]
pub position_amt: String,
#[serde(rename = "updateTime")]
pub update_time: u64,
}
#[derive(Debug, Deserialize)]
pub struct PositionMarginHistoryRecord {
pub amount: String,
pub asset: String,
pub symbol: String,
pub time: u64,
#[serde(rename = "type")]
pub margin_type: u8,
#[serde(rename = "positionSide")]
pub position_side: String,
}