use serde::{Deserialize, Serialize};
use crate::futures::models::de;
pub type Price = String;
pub type Quantity = String;
#[derive(Debug, Serialize, Default)]
pub struct PlaceOrderParams {
pub symbol: String,
pub side: String,
#[serde(rename = "type")]
pub order_type: String,
pub quantity: Quantity,
#[serde(skip_serializing_if = "Option::is_none")]
pub price: Option<Price>,
#[serde(rename = "timeInForce", skip_serializing_if = "Option::is_none")]
pub time_in_force: Option<String>,
#[serde(rename = "reduceOnly", skip_serializing_if = "Option::is_none")]
pub reduce_only: Option<bool>,
#[serde(rename = "newClientOrderId", skip_serializing_if = "Option::is_none")]
pub new_client_order_id: Option<String>,
#[serde(rename = "stopPrice", skip_serializing_if = "Option::is_none")]
pub stop_price: Option<Price>,
#[serde(rename = "activationPrice", skip_serializing_if = "Option::is_none")]
pub activation_price: Option<Price>,
#[serde(rename = "callbackRate", skip_serializing_if = "Option::is_none")]
pub callback_rate: Option<String>,
#[serde(rename = "workingType", skip_serializing_if = "Option::is_none")]
pub working_type: Option<String>,
#[serde(rename = "priceProtect", skip_serializing_if = "Option::is_none")]
pub price_protect: Option<bool>,
#[serde(rename = "newOrderRespType", skip_serializing_if = "Option::is_none")]
pub new_order_resp_type: Option<String>,
}
#[derive(Debug, Serialize, Default)]
pub struct CancelOrderParams {
pub symbol: String,
#[serde(rename = "orderId")]
pub order_id: Option<i64>,
#[serde(rename = "origClientOrderId")]
pub orig_client_order_id: Option<String>,
}
#[derive(Debug, Default)]
pub struct ModifyOrderParams {
pub symbol: String,
pub order_id: Option<i64>,
pub orig_client_order_id: Option<String>,
pub quantity: Option<Quantity>,
pub price: Option<Price>,
}
#[derive(Debug, Deserialize)]
pub struct OrderResponse {
#[serde(rename = "orderId")]
pub order_id: i64,
pub symbol: String,
pub status: String,
#[serde(rename = "clientOrderId")]
pub client_order_id: String,
pub price: Price,
#[serde(rename = "avgPrice")]
pub avg_price: Price,
#[serde(rename = "origQty")]
pub orig_qty: Quantity,
#[serde(rename = "executedQty")]
pub executed_qty: Quantity,
#[serde(rename = "cumQty", default)]
pub cum_qty: Quantity,
#[serde(rename = "cumQuote")]
pub cum_quote: Price,
#[serde(rename = "timeInForce")]
pub time_in_force: String,
#[serde(rename = "type")]
pub order_type: String,
pub side: String,
#[serde(rename = "stopPrice")]
pub stop_price: Price,
#[serde(rename = "workingType")]
pub working_type: String,
#[serde(rename = "activatePrice", default)]
pub activate_price: Price,
#[serde(rename = "priceRate", default)]
pub price_rate: Price,
#[serde(rename = "updateTime")]
pub update_time: u64,
#[serde(rename = "origType")]
pub orig_type: String,
#[serde(rename = "positionSide")]
pub position_side: String,
#[serde(rename = "priceProtect")]
pub price_protect: bool,
#[serde(rename = "reduceOnly")]
pub reduce_only: bool,
#[serde(rename = "closePosition", default)]
pub close_position: bool,
#[serde(default)]
pub time: Option<u64>,
}
pub type CancelOrderResponse = OrderResponse;
#[derive(Debug, Deserialize)]
pub struct PositionResponse {
pub symbol: String,
#[serde(rename = "initialMargin", default)]
pub initial_margin: String,
#[serde(rename = "maintMargin", default)]
pub maint_margin: String,
#[serde(rename = "positionInitialMargin", default)]
pub position_initial_margin: String,
#[serde(rename = "openOrderInitialMargin", default)]
pub open_order_initial_margin: String,
#[serde(default)]
pub isolated: bool,
#[serde(rename = "unrealizedProfit", alias = "unRealizedProfit", default)]
pub unrealized_profit: String,
#[serde(rename = "maxNotional", alias = "maxNotionalValue", default)]
pub max_notional: String,
pub leverage: String,
#[serde(rename = "entryPrice")]
pub entry_price: String,
#[serde(rename = "positionSide")]
pub position_side: String,
#[serde(rename = "positionAmt")]
pub position_amt: String,
#[serde(rename = "updateTime")]
pub update_time: u64,
#[serde(rename = "markPrice", default)]
pub mark_price: String,
#[serde(rename = "liquidationPrice", default)]
pub liquidation_price: String,
#[serde(rename = "marginType", default)]
pub margin_type: String,
#[serde(rename = "isolatedMargin", default)]
pub isolated_margin: String,
#[serde(rename = "isAutoAddMargin", default)]
pub is_auto_add_margin: String,
#[serde(default)]
pub notional: String,
#[serde(rename = "isolatedWallet", default)]
pub isolated_wallet: String,
}
#[derive(Debug, Deserialize)]
pub struct ListenKeyResponse {
#[serde(rename = "listenKey")]
pub listen_key: String,
}
#[derive(Debug, Deserialize, Default)]
pub struct EmptyResponse {}
#[derive(Debug, Clone, Copy)]
pub enum PositionMarginType {
Add = 1,
Reduce = 2,
}
impl std::fmt::Display for PositionMarginType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", *self as u8)
}
}
#[derive(Debug, Default)]
pub struct GetOrderParams {
pub symbol: String,
pub order_id: Option<i64>,
pub orig_client_order_id: Option<String>,
}
#[derive(Debug, Default)]
pub struct AllOrdersParams {
pub symbol: String,
pub order_id: Option<i64>,
pub start_time: Option<u64>,
pub end_time: Option<u64>,
pub limit: Option<u32>,
}
#[derive(Debug, Default)]
pub struct UserTradesParams {
pub symbol: String,
pub order_id: Option<i64>,
pub start_time: Option<u64>,
pub end_time: Option<u64>,
pub from_id: Option<i64>,
pub limit: Option<u32>,
}
#[derive(Debug, Default)]
pub struct IncomeParams {
pub symbol: Option<String>,
pub income_type: Option<String>,
pub start_time: Option<u64>,
pub end_time: Option<u64>,
pub limit: Option<u32>,
}
#[derive(Debug)]
pub struct PositionMarginParams {
pub symbol: String,
pub position_side: Option<String>,
pub amount: String,
pub margin_type: u8,
}
#[derive(Debug)]
pub struct CountdownParams {
pub symbol: String,
pub countdown_time: i64,
}
#[derive(Debug, Deserialize)]
pub struct UserTrade {
pub symbol: String,
pub id: i64,
#[serde(rename = "orderId")] pub order_id: i64,
pub price: Price,
pub qty: Quantity,
#[serde(rename = "realizedPnl")] pub realized_pnl: Price,
#[serde(rename = "marginAsset")] pub margin_asset: String,
#[serde(rename = "quoteQty")] pub quote_qty: Price,
pub commission: Price,
#[serde(rename = "commissionAsset")] pub commission_asset: String,
pub time: u64,
#[serde(rename = "positionSide")] pub position_side: String,
pub buyer: bool,
pub maker: bool,
pub side: String,
}
#[derive(Debug, Deserialize)]
pub struct IncomeRecord {
pub symbol: String,
#[serde(rename = "incomeType")] pub income_type: String,
pub income: Price,
pub asset: String,
pub info: String,
pub time: u64,
#[serde(rename = "tranId", default, deserialize_with = "de::opt_string_or_number")]
pub tran_id: Option<String>,
#[serde(rename = "tradeId")] pub trade_id: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct PositionMarginResponse {
pub amount: Price,
pub code: i64,
pub msg: String,
#[serde(rename = "type")] pub margin_type: u8,
}
#[derive(Debug, Deserialize)]
pub struct CountdownResponse {
pub symbol: String,
#[serde(rename = "countdownTime", deserialize_with = "de::string_or_number_i64")]
pub countdown_time: i64,
}