deribit_base/model/
order_management.rs1use crate::model::order::{OrderSide, OrderType, TimeInForce};
8use crate::{impl_json_debug_pretty, impl_json_display};
9use serde::{Deserialize, Serialize};
10
11#[derive(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
32impl_json_display!(BuyOrderRequest);
33impl_json_debug_pretty!(BuyOrderRequest);
34
35#[derive(Clone, Serialize, Deserialize)]
37pub struct SellOrderRequest {
38 pub instrument_name: String,
40 pub amount: f64,
42 pub price: Option<f64>,
44 pub label: Option<String>,
46 pub time_in_force: Option<TimeInForce>,
48 pub reduce_only: Option<bool>,
50 pub post_only: Option<bool>,
52 pub type_: Option<OrderType>,
54}
55
56impl_json_display!(SellOrderRequest);
57impl_json_debug_pretty!(SellOrderRequest);
58
59#[derive(Clone, Serialize, Deserialize)]
61pub struct EditOrderRequest {
62 pub order_id: String,
64 pub amount: Option<f64>,
66 pub price: Option<f64>,
68 pub post_only: Option<bool>,
70 pub reduce_only: Option<bool>,
72 pub time_in_force: Option<TimeInForce>,
74}
75
76impl_json_display!(EditOrderRequest);
77impl_json_debug_pretty!(EditOrderRequest);
78
79#[derive(Clone, Serialize, Deserialize)]
81pub struct MassQuoteItem {
82 pub instrument_name: String,
84 pub side: OrderSide,
86 pub amount: f64,
88 pub price: f64,
90}
91
92#[derive(Clone, Serialize, Deserialize)]
94pub struct MassQuoteRequest {
95 pub items: Vec<MassQuoteItem>,
97 pub label: Option<String>,
99}
100
101impl_json_display!(MassQuoteRequest);
102impl_json_debug_pretty!(MassQuoteRequest);
103
104#[derive(Clone, Serialize, Deserialize)]
106pub struct TransferResult {
107 pub id: String,
109 pub status: String,
111}
112
113impl_json_display!(TransferResult);
114impl_json_debug_pretty!(TransferResult);
115
116#[derive(Clone, Serialize, Deserialize)]
118pub struct QuoteResult {
119 pub instrument_name: String,
121 pub success: bool,
123 pub error: Option<String>,
125}
126
127impl_json_display!(QuoteResult);
128impl_json_debug_pretty!(QuoteResult);
129
130#[cfg(test)]
131mod tests {
132 use super::*;
133
134 #[test]
135 fn test_mass_quote_request() {
136 let item = MassQuoteItem {
137 instrument_name: "BTC-PERPETUAL".to_string(),
138 side: OrderSide::Buy,
139 amount: 10.0,
140 price: 50000.0,
141 };
142 let req = MassQuoteRequest {
143 items: vec![item],
144 label: Some("test".to_string()),
145 };
146 let json = serde_json::to_string(&req).unwrap();
147 let de: MassQuoteRequest = serde_json::from_str(&json).unwrap();
148 assert_eq!(de.items.len(), 1);
149 }
150}