1use crate::{
2 orderflow::{
3 order_types::*, Cancel, CancelReject, Modify, Order, OrderReject, OrderSource,
4 TimeInForce,
5 },
6 symbology::ExecutionVenue,
7 AccountIdOrName, Dir, OrderId, TraderIdOrEmail,
8};
9use chrono::{DateTime, Utc};
10use derive::grpc;
11use derive_builder::Builder;
12use rust_decimal::Decimal;
13use schemars::JsonSchema;
14use serde::{Deserialize, Serialize};
15use serde_with::skip_serializing_none;
16use uuid::Uuid;
17
18#[grpc(package = "json.architect")]
19#[grpc(service = "Oms", name = "place_order", response = "Order")]
20#[derive(Builder, Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
21pub struct PlaceOrderRequest {
23 pub id: Option<OrderId>,
26 #[serde(rename = "pid", default)]
27 #[schemars(title = "parent_id")]
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub parent_id: Option<OrderId>,
30 #[serde(rename = "s")]
31 #[schemars(title = "symbol")]
32 pub symbol: String,
33 #[serde(rename = "d")]
34 #[schemars(title = "dir")]
35 pub dir: Dir,
36 #[serde(rename = "q")]
37 #[schemars(title = "quantity")]
38 pub quantity: Decimal,
39 #[serde(rename = "u", default)]
40 #[schemars(title = "trader")]
41 #[builder(setter(strip_option), default)]
42 pub trader: Option<TraderIdOrEmail>,
43 #[serde(rename = "a", default)]
44 #[schemars(title = "account")]
45 #[builder(setter(strip_option), default)]
46 pub account: Option<AccountIdOrName>,
47 #[serde(flatten)]
48 pub order_type: OrderType,
49 #[serde(rename = "tif")]
50 #[schemars(title = "time_in_force")]
51 #[builder(default = "TimeInForce::GoodTilCancel")]
52 pub time_in_force: TimeInForce,
53 #[serde(rename = "src", default)]
54 #[schemars(title = "source")]
55 #[builder(setter(strip_option), default)]
56 pub source: Option<OrderSource>,
57 #[serde(rename = "x", default)]
58 #[schemars(title = "execution_venue")]
59 #[builder(setter(strip_option), default)]
60 pub execution_venue: Option<ExecutionVenue>,
61}
62
63#[grpc(package = "json.architect")]
64#[grpc(service = "Oms", name = "place_batch_order", response = "PlaceBatchOrderResponse")]
65#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
66pub struct PlaceBatchOrderRequest {
67 pub place_orders: Vec<PlaceOrderRequest>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
71pub struct PlaceBatchOrderResponse {
72 pub pending_orders: Vec<Order>,
73 pub order_rejects: Vec<OrderReject>,
74}
75
76#[grpc(package = "json.architect")]
77#[grpc(service = "Oms", name = "cancel_order", response = "Cancel")]
78#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
79pub struct CancelOrderRequest {
80 #[serde(rename = "xid", default)]
83 #[schemars(title = "cancel_id")]
84 pub cancel_id: Option<Uuid>,
85 #[serde(rename = "id")]
86 #[schemars(title = "order_id")]
87 pub order_id: OrderId,
88}
89
90#[grpc(package = "json.architect")]
93#[grpc(
94 service = "Oms",
95 name = "batch_cancel_orders",
96 response = "BatchCancelOrdersResponse"
97)]
98#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
99pub struct BatchCancelOrdersRequest {
100 pub cancel_orders: Vec<CancelOrderRequest>,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
104pub struct BatchCancelOrdersResponse {
105 pub cancels: Vec<Cancel>,
106 pub cancel_rejects: Vec<CancelReject>,
107}
108
109#[grpc(package = "json.architect")]
112#[grpc(service = "Oms", name = "modify_order", response = "Modify")]
113#[derive(Debug, Clone, Copy, Serialize, Deserialize, JsonSchema)]
114pub struct ModifyOrderRequest {
115 #[serde(rename = "mid", default)]
118 #[schemars(title = "modify_id")]
119 pub modify_id: Option<Uuid>,
120
121 #[serde(rename = "id")]
122 #[schemars(title = "order_id")]
123 pub order_id: OrderId,
124
125 #[serde(rename = "q")]
126 #[schemars(title = "new_quantity")]
127 pub new_quantity: Option<Decimal>,
128
129 #[serde(rename = "p")]
130 #[schemars(title = "new_price")]
131 pub new_price: Option<Decimal>,
132}
133
134#[grpc(package = "json.architect")]
135#[grpc(service = "Oms", name = "cancel_all_orders", response = "CancelAllOrdersResponse")]
136#[skip_serializing_none]
137#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
138pub struct CancelAllOrdersRequest {
139 pub id: Uuid,
140 #[serde(default)]
141 pub trader: Option<TraderIdOrEmail>,
142 #[serde(default)]
143 pub account: Option<AccountIdOrName>,
144 #[serde(default)]
145 pub execution_venue: Option<ExecutionVenue>,
146}
147
148#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
150pub struct CancelAllOrdersResponse {}
151
152#[grpc(package = "json.architect")]
153#[grpc(service = "Oms", name = "open_orders", response = "OpenOrdersResponse")]
154#[skip_serializing_none]
155#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
156pub struct OpenOrdersRequest {
157 pub venue: Option<ExecutionVenue>,
158 pub account: Option<AccountIdOrName>,
159 pub trader: Option<TraderIdOrEmail>,
160 pub symbol: Option<String>,
161 pub parent_order_id: Option<OrderId>,
162 pub order_ids: Option<Vec<OrderId>>,
163 #[serde(default, skip_serializing_if = "Option::is_none")]
164 pub from_inclusive: Option<DateTime<Utc>>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
166 pub to_exclusive: Option<DateTime<Utc>>,
167 #[serde(default)]
168 pub limit: Option<i32>,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
172pub struct OpenOrdersResponse {
173 pub open_orders: Vec<Order>,
174}
175
176#[grpc(package = "json.architect")]
177#[grpc(service = "Oms", name = "pending_cancels", response = "PendingCancelsResponse")]
178#[skip_serializing_none]
179#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
180pub struct PendingCancelsRequest {
181 pub venue: Option<ExecutionVenue>,
182 pub account: Option<AccountIdOrName>,
183 pub trader: Option<TraderIdOrEmail>,
184 pub symbol: Option<String>,
185 pub cancel_ids: Option<Vec<Uuid>>,
186}
187
188#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
189pub struct PendingCancelsResponse {
190 pub pending_cancels: Vec<Cancel>,
191}
192
193#[grpc(package = "json.architect")]
194#[grpc(service = "Oms", name = "pending_modifies", response = "PendingModifiesResponse")]
195#[skip_serializing_none]
196#[derive(Debug, Default, Clone, Serialize, Deserialize, JsonSchema)]
197pub struct PendingModifiesRequest {
198 pub venue: Option<ExecutionVenue>,
199 pub account: Option<AccountIdOrName>,
200 pub trader: Option<TraderIdOrEmail>,
201 pub symbol: Option<String>,
202 pub modify_ids: Option<Vec<Uuid>>,
203}
204
205#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
206pub struct PendingModifiesResponse {
207 pub pending_modifies: Vec<Modify>,
208}
209#[grpc(package = "json.architect")]
212#[grpc(service = "Oms", name = "reconcile_out", response = "ReconcileOutResponse")]
213#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
214pub struct ReconcileOutRequest {
215 pub order_id: Option<OrderId>,
216 pub order_ids: Option<Vec<OrderId>>,
217}
218
219#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
220pub struct ReconcileOutResponse {}