use nautilus_network::websocket::WebSocketClient;
use serde::{Deserialize, Serialize};
use crate::futures::http::{
models::BinanceFuturesOrder,
query::{BinanceCancelOrderParams, BinanceModifyOrderParams, BinanceNewOrderParams},
};
#[allow(
missing_debug_implementations,
clippy::large_enum_variant,
reason = "Commands are ephemeral and immediately consumed"
)]
pub enum BinanceFuturesWsTradingCommand {
SetClient(WebSocketClient),
Disconnect,
PlaceOrder {
id: String,
params: BinanceNewOrderParams,
},
CancelOrder {
id: String,
params: BinanceCancelOrderParams,
},
ModifyOrder {
id: String,
params: BinanceModifyOrderParams,
},
CancelAllOrders {
id: String,
symbol: String,
},
}
#[derive(Debug, Clone)]
pub enum BinanceFuturesWsTradingMessage {
Connected,
Reconnected,
OrderAccepted {
request_id: String,
response: Box<BinanceFuturesOrder>,
},
OrderRejected {
request_id: String,
code: i32,
msg: String,
},
OrderCanceled {
request_id: String,
response: Box<BinanceFuturesOrder>,
},
CancelRejected {
request_id: String,
code: i32,
msg: String,
},
OrderModified {
request_id: String,
response: Box<BinanceFuturesOrder>,
},
ModifyRejected {
request_id: String,
code: i32,
msg: String,
},
AllOrdersCanceled {
request_id: String,
},
Error(String),
}
#[derive(Debug, Clone, Copy)]
pub enum BinanceFuturesWsTradingRequestMeta {
PlaceOrder,
CancelOrder,
ModifyOrder,
CancelAllOrders,
}
#[derive(Debug, Clone, Serialize)]
pub struct BinanceFuturesWsTradingRequest {
pub id: String,
pub method: String,
pub params: serde_json::Value,
}
impl BinanceFuturesWsTradingRequest {
#[must_use]
pub fn new(
id: impl Into<String>,
method: impl Into<String>,
params: serde_json::Value,
) -> Self {
Self {
id: id.into(),
method: method.into(),
params,
}
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct BinanceFuturesWsTradingResponse {
pub id: String,
pub status: u16,
pub result: Option<serde_json::Value>,
#[serde(default, rename = "rateLimits")]
pub rate_limits: Vec<serde_json::Value>,
pub error: Option<BinanceFuturesWsTradingResponseError>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct BinanceFuturesWsTradingResponseError {
pub code: i32,
pub msg: String,
}
pub mod method {
pub const ORDER_PLACE: &str = "order.place";
pub const ORDER_CANCEL: &str = "order.cancel";
pub const ORDER_MODIFY: &str = "order.modify";
pub const OPEN_ORDERS_CANCEL_ALL: &str = "openOrders.cancelAll";
}