deribit_base/model/order.rs
1/******************************************************************************
2 Author: Joaquín Béjar García
3 Email: jb@taunais.com
4 Date: 21/7/25
5******************************************************************************/
6use crate::{impl_json_debug_pretty, impl_json_display};
7use serde::{Deserialize, Serialize};
8
9/// Time in force enumeration
10#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11pub enum TimeInForce {
12 /// Order is valid for the current trading day only
13 Day,
14 /// Order remains active until explicitly cancelled
15 GoodTillCancel,
16 /// Order must be executed immediately or cancelled
17 ImmediateOrCancel,
18 /// Order must be filled completely or cancelled
19 FillOrKill,
20}
21
22/// Order side enumeration
23#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
24pub enum OrderSide {
25 /// Buy order
26 Buy,
27 /// Sell order
28 Sell,
29}
30
31/// Order type enumeration
32#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
33pub enum OrderType {
34 /// Market order - executed immediately at current market price
35 Market,
36 /// Limit order - executed only at specified price or better
37 Limit,
38 /// Stop order - becomes market order when stop price is reached
39 Stop,
40 /// Stop limit order - becomes limit order when stop price is reached
41 StopLimit,
42}
43
44/// New order request structure
45#[derive(Clone, Serialize, Deserialize)]
46pub struct NewOrderRequest {
47 /// Trading symbol/instrument name
48 pub symbol: String,
49 /// Order side (buy or sell)
50 pub side: OrderSide,
51 /// Type of order
52 pub order_type: OrderType,
53 /// Order quantity
54 pub quantity: f64,
55 /// Order price (required for limit orders)
56 pub price: Option<f64>,
57 /// Time in force specification
58 pub time_in_force: TimeInForce,
59 /// Client-specified order identifier
60 pub client_order_id: Option<String>,
61}
62
63/// Order status enumeration
64#[derive(Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
65pub enum OrderStatus {
66 /// Order has been accepted by the system
67 New,
68 /// Order has been partially filled
69 PartiallyFilled,
70 /// Order has been completely filled
71 Filled,
72 /// Order is done for the day
73 DoneForDay,
74 /// Order has been cancelled
75 Canceled,
76 /// Order has been replaced
77 Replaced,
78 /// Order cancellation is pending
79 PendingCancel,
80 /// Order has been stopped
81 Stopped,
82 /// Order has been rejected
83 Rejected,
84 /// Order has been suspended
85 Suspended,
86 /// Order is pending acceptance
87 PendingNew,
88 /// Order has been calculated
89 Calculated,
90 /// Order has expired
91 Expired,
92 /// Order has been accepted for bidding
93 AcceptedForBidding,
94 /// Order replacement is pending
95 PendingReplace,
96}
97
98impl_json_debug_pretty!(
99 TimeInForce,
100 OrderSide,
101 OrderType,
102 NewOrderRequest,
103 OrderStatus
104);
105impl_json_display!(
106 TimeInForce,
107 OrderSide,
108 OrderType,
109 NewOrderRequest,
110 OrderStatus
111);