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);