architect_api/oms/
mod.rs

1use crate::{
2    orderflow::{order_types::*, Cancel, Order, OrderSource, TimeInForce},
3    symbology::ExecutionVenue,
4    AccountIdOrName, Dir, OrderId, TraderIdOrEmail,
5};
6use derive::grpc;
7use derive_builder::Builder;
8use rust_decimal::Decimal;
9use schemars::JsonSchema;
10use serde::{Deserialize, Serialize};
11use serde_with::skip_serializing_none;
12use uuid::Uuid;
13
14#[grpc(package = "json.architect")]
15#[grpc(service = "Oms", name = "place_order", response = "Order")]
16#[derive(Builder, Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
17pub struct PlaceOrderRequest {
18    /// If not specified, one will be generated for you; note, in that case,
19    /// you won't know for sure if the specific request went through.
20    pub id: Option<OrderId>,
21    #[serde(rename = "pid", default)]
22    #[schemars(title = "parent_id")]
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub parent_id: Option<OrderId>,
25    #[serde(rename = "s")]
26    #[schemars(title = "symbol")]
27    pub symbol: String,
28    #[serde(rename = "d")]
29    #[schemars(title = "dir")]
30    pub dir: Dir,
31    #[serde(rename = "q")]
32    #[schemars(title = "quantity")]
33    pub quantity: Decimal,
34    #[serde(rename = "u", default)]
35    #[schemars(title = "trader")]
36    #[builder(setter(strip_option), default)]
37    pub trader: Option<TraderIdOrEmail>,
38    #[serde(rename = "a", default)]
39    #[schemars(title = "account")]
40    #[builder(setter(strip_option), default)]
41    pub account: Option<AccountIdOrName>,
42    #[serde(flatten)]
43    pub order_type: OrderType,
44    #[serde(rename = "tif")]
45    #[schemars(title = "time_in_force")]
46    #[builder(default = "TimeInForce::GoodTilCancel")]
47    pub time_in_force: TimeInForce,
48    #[serde(rename = "src", default)]
49    #[schemars(title = "source")]
50    #[builder(setter(strip_option), default)]
51    pub source: Option<OrderSource>,
52    #[serde(rename = "x", default)]
53    #[schemars(title = "execution_venue")]
54    #[builder(setter(strip_option), default)]
55    pub execution_venue: Option<ExecutionVenue>,
56}
57
58#[grpc(package = "json.architect")]
59#[grpc(service = "Oms", name = "cancel_order", response = "Cancel")]
60#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
61pub struct CancelOrderRequest {
62    /// If not specified, one will be generated for you; note, in that case,
63    /// you won't know for sure if the specific request went through.
64    #[serde(rename = "xid", default)]
65    #[schemars(title = "cancel_id")]
66    pub cancel_id: Option<Uuid>,
67    #[serde(rename = "id")]
68    #[schemars(title = "order_id")]
69    pub order_id: OrderId,
70}
71
72#[grpc(package = "json.architect")]
73#[grpc(service = "Oms", name = "cancel_all_orders", response = "CancelAllOrdersResponse")]
74#[skip_serializing_none]
75#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
76pub struct CancelAllOrdersRequest {
77    pub id: Uuid,
78    #[serde(default)]
79    pub trader: Option<TraderIdOrEmail>,
80    #[serde(default)]
81    pub account: Option<AccountIdOrName>,
82    #[serde(default)]
83    pub execution_venue: Option<ExecutionVenue>,
84}
85
86// CR alee: we could think of a more useful response
87#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
88pub struct CancelAllOrdersResponse {}
89
90#[grpc(package = "json.architect")]
91#[grpc(service = "Oms", name = "open_orders", response = "OpenOrdersResponse")]
92#[skip_serializing_none]
93#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
94pub struct OpenOrdersRequest {
95    pub venue: Option<ExecutionVenue>,
96    pub account: Option<AccountIdOrName>,
97    pub trader: Option<TraderIdOrEmail>,
98    pub symbol: Option<String>,
99    pub parent_order_id: Option<OrderId>,
100    pub order_ids: Option<Vec<OrderId>>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
104pub struct OpenOrdersResponse {
105    pub open_orders: Vec<Order>,
106}
107
108#[grpc(package = "json.architect")]
109#[grpc(service = "Oms", name = "pending_cancels", response = "PendingCancelsResponse")]
110#[skip_serializing_none]
111#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
112pub struct PendingCancelsRequest {
113    pub venue: Option<ExecutionVenue>,
114    pub account: Option<AccountIdOrName>,
115    pub trader: Option<TraderIdOrEmail>,
116    pub symbol: Option<String>,
117    pub cancel_ids: Option<Vec<Uuid>>,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
121pub struct PendingCancelsResponse {
122    pub pending_cancels: Vec<Cancel>,
123}