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 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 #[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#[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}