deribit_http/model/order.rs
1/******************************************************************************
2 Author: Joaquín Béjar García
3 Email: jb@taunais.com
4 Date: 15/9/25
5******************************************************************************/
6use pretty_simple_display::{DebugPretty, DisplaySimple};
7use serde::{Deserialize, Serialize};
8
9/// Order status enumeration
10#[derive(DebugPretty, DisplaySimple, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
11pub enum OrderStatus {
12 /// Order has been accepted by the system
13 New,
14 /// Order has been partially filled
15 PartiallyFilled,
16 /// Order has been completely filled
17 Filled,
18 /// Order is done for the day
19 DoneForDay,
20 /// Order has been cancelled
21 Canceled,
22 /// Order has been replaced
23 Replaced,
24 /// Order cancellation is pending
25 PendingCancel,
26 /// Order has been stopped
27 Stopped,
28 /// Order has been rejected
29 Rejected,
30 /// Order has been suspended
31 Suspended,
32 /// Order is pending acceptance
33 PendingNew,
34 /// Order has been calculated
35 Calculated,
36 /// Order has expired
37 Expired,
38 /// Order has been accepted for bidding
39 AcceptedForBidding,
40 /// Order replacement is pending
41 PendingReplace,
42}
43
44/// Order side enumeration
45#[derive(DebugPretty, DisplaySimple, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
46pub enum OrderSide {
47 /// Buy order
48 Buy,
49 /// Sell order
50 Sell,
51}
52
53/// Order type enum
54#[derive(DebugPretty, DisplaySimple, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
55pub enum OrderType {
56 /// Limit order - executes at specified price or better
57 #[serde(rename = "limit")]
58 Limit,
59 /// Market order - executes immediately at best available price
60 #[serde(rename = "market")]
61 Market,
62 /// Stop limit order - becomes limit order when stop price is reached
63 #[serde(rename = "stop_limit")]
64 StopLimit,
65 /// Stop market order - becomes market order when stop price is reached
66 #[serde(rename = "stop_market")]
67 StopMarket,
68 /// Take limit order - limit order to take profit
69 #[serde(rename = "take_limit")]
70 TakeLimit,
71 /// Take market order - market order to take profit
72 #[serde(rename = "take_market")]
73 TakeMarket,
74 /// Market limit order - market order with limit price protection
75 #[serde(rename = "market_limit")]
76 MarketLimit,
77 /// Trailing stop order - stop order that trails the market price
78 #[serde(rename = "trailing_stop")]
79 TrailingStop,
80}
81
82impl OrderType {
83 /// Returns the string representation of the order type
84 pub fn as_str(&self) -> &'static str {
85 match self {
86 OrderType::Limit => "limit",
87 OrderType::Market => "market",
88 OrderType::StopLimit => "stop_limit",
89 OrderType::StopMarket => "stop_market",
90 OrderType::TakeLimit => "take_limit",
91 OrderType::TakeMarket => "take_market",
92 OrderType::MarketLimit => "market_limit",
93 OrderType::TrailingStop => "trailing_stop",
94 }
95 }
96}