deribit_base/model/
order_management.rs1use crate::model::order::{OrderSide, OrderType, TimeInForce};
7use pretty_simple_display::{DebugPretty, DisplaySimple};
8
9use serde::{Deserialize, Serialize};
10
11#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
13pub struct BuyOrderRequest {
14 pub instrument_name: String,
16 pub amount: f64,
18 pub price: Option<f64>,
20 pub label: Option<String>,
22 pub time_in_force: Option<TimeInForce>,
24 pub reduce_only: Option<bool>,
26 pub post_only: Option<bool>,
28 pub type_: Option<OrderType>,
30}
31
32#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
34pub struct SellOrderRequest {
35 pub instrument_name: String,
37 pub amount: f64,
39 pub price: Option<f64>,
41 pub label: Option<String>,
43 pub time_in_force: Option<TimeInForce>,
45 pub reduce_only: Option<bool>,
47 pub post_only: Option<bool>,
49 pub type_: Option<OrderType>,
51}
52
53#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
55pub struct EditOrderRequest {
56 pub order_id: String,
58 pub amount: Option<f64>,
60 pub price: Option<f64>,
62 pub post_only: Option<bool>,
64 pub reduce_only: Option<bool>,
66 pub time_in_force: Option<TimeInForce>,
68}
69
70#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
72pub struct MassQuoteItem {
73 pub instrument_name: String,
75 pub side: OrderSide,
77 pub amount: f64,
79 pub price: f64,
81}
82
83#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
85pub struct MassQuoteRequest {
86 pub items: Vec<MassQuoteItem>,
88 pub label: Option<String>,
90}
91
92#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
94pub struct TransferResult {
95 pub id: String,
97 pub status: String,
99}
100
101#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
103pub struct QuoteResult {
104 pub instrument_name: String,
106 pub success: bool,
108 pub error: Option<String>,
110}
111
112#[cfg(test)]
113mod tests {
114 use super::*;
115
116 #[test]
117 fn test_mass_quote_request() {
118 let item = MassQuoteItem {
119 instrument_name: "BTC-PERPETUAL".to_string(),
120 side: OrderSide::Buy,
121 amount: 10.0,
122 price: 50000.0,
123 };
124 let req = MassQuoteRequest {
125 items: vec![item],
126 label: Some("test".to_string()),
127 };
128 let json = serde_json::to_string(&req).unwrap();
129 let de: MassQuoteRequest = serde_json::from_str(&json).unwrap();
130 assert_eq!(de.items.len(), 1);
131 }
132}