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}