Skip to main content

ig_client/presentation/
order.rs

1/******************************************************************************
2   Author: Joaquín Béjar García
3   Email: jb@taunais.com
4   Date: 13/5/25
5******************************************************************************/
6use pretty_simple_display::DisplaySimple;
7use serde::{Deserialize, Serialize};
8
9/// Order direction (buy or sell)
10#[repr(u8)]
11#[derive(
12    Debug, Clone, Copy, DisplaySimple, Serialize, Deserialize, PartialEq, Eq, Hash, Default,
13)]
14#[serde(rename_all = "UPPERCASE")]
15pub enum Direction {
16    /// Buy direction (long position)
17    #[default]
18    Buy,
19    /// Sell direction (short position)
20    Sell,
21}
22
23/// Order type
24#[repr(u8)]
25#[derive(
26    Debug, Clone, Copy, DisplaySimple, Serialize, Deserialize, PartialEq, Eq, Hash, Default,
27)]
28#[serde(rename_all = "UPPERCASE")]
29pub enum OrderType {
30    /// Limit order - executed when price reaches specified level
31    #[default]
32    Limit,
33    /// Market order - executed immediately at current market price
34    Market,
35    /// Quote order - executed at quoted price
36    Quote,
37    /// Stop order - becomes market order when price reaches specified level
38    Stop,
39    /// Stop limit order - becomes limit order when price reaches specified level
40    StopLimit,
41}
42
43/// Represents the status of an order or transaction in the system.
44///
45/// This enum covers various states an order can be in throughout its lifecycle,
46/// from creation to completion or cancellation.
47#[repr(u8)]
48#[derive(
49    Debug, Clone, Copy, DisplaySimple, Serialize, Deserialize, PartialEq, Eq, Hash, Default,
50)]
51#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
52pub enum Status {
53    /// Order has been amended or modified after initial creation
54    Amended,
55    /// Order has been deleted from the system
56    Deleted,
57    /// Order has been completely closed with all positions resolved
58    FullyClosed,
59    /// Order has been opened and is active in the market
60    Opened,
61    /// Order has been partially closed with some positions still open
62    PartiallyClosed,
63    /// Order has been closed but may differ from FullyClosed in context
64    Closed,
65    /// Default state - order is open and active in the market
66    #[default]
67    Open,
68    /// Order has been updated with new parameters
69    Updated,
70    /// Order has been accepted by the system or exchange
71    Accepted,
72    /// Order has been rejected by the system or exchange
73    Rejected,
74    /// Order is currently working (waiting to be filled)
75    Working,
76    /// Order has been filled (executed)
77    Filled,
78    /// Order has been cancelled
79    Cancelled,
80    /// Order has expired (time in force elapsed)
81    Expired,
82}
83
84/// Order duration (time in force)
85#[repr(u8)]
86#[derive(
87    Debug, Clone, Copy, DisplaySimple, Serialize, Deserialize, PartialEq, Eq, Hash, Default,
88)]
89#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
90pub enum TimeInForce {
91    /// Order remains valid until cancelled by the client
92    #[default]
93    GoodTillCancelled,
94    /// Order remains valid until a specified date
95    GoodTillDate,
96    /// Order is executed immediately (partially or completely) or cancelled
97    ImmediateOrCancel,
98    /// Order must be filled completely immediately or cancelled
99    FillOrKill,
100}