architect_api/orderflow/
mod.rs1use crate::{oms::*, symbology::ExecutionVenue, AccountIdOrName, TraderIdOrEmail};
2use derive::grpc;
3use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5
6pub mod cancel;
7pub mod fill;
8pub mod modify;
9pub mod order;
10pub mod order_id;
11pub mod order_types;
12
13pub use cancel::*;
14pub use fill::*;
15pub use modify::*;
16pub use order::*;
17pub use order_id::*;
18pub use order_types::*;
19
20#[grpc(package = "json.architect")]
21#[grpc(service = "Orderflow", name = "orderflow", response = "Orderflow", bidi_streaming)]
22#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
23#[serde(tag = "t")]
24pub enum OrderflowRequest {
26 #[serde(rename = "p")]
27 #[schemars(title = "PlaceOrder|PlaceOrderRequest")]
28 PlaceOrder(PlaceOrderRequest),
29 #[serde(rename = "pp")]
30 #[schemars(title = "PlaceBatchOrder|PlaceBatchOrderRequest")]
31 PlaceBatchOrder(PlaceBatchOrderRequest),
32 #[serde(rename = "x")]
33 #[schemars(title = "CancelOrder|CancelOrderRequest")]
34 CancelOrder(CancelOrderRequest),
35 #[serde(rename = "xo")]
36 #[schemars(title = "CancelAllOrders|CancelAllOrdersRequest")]
37 CancelAllOrders(CancelAllOrdersRequest),
38 #[serde(rename = "xb")]
39 #[schemars(title = "BatchCancelOrders|BatchCancelOrdersRequest")]
40 BatchCancelOrders(BatchCancelOrdersRequest),
41 #[serde(rename = "modify_order")]
42 #[schemars(title = "ModifyOrder|ModifyOrderRequest")]
43 ModifyOrder(ModifyOrderRequest),
44}
45
46#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
47#[serde(tag = "t")]
48pub enum Orderflow {
50 #[serde(rename = "w")]
51 #[schemars(title = "OrderPending|Order")]
52 OrderPending(Order),
53 #[serde(rename = "a")]
54 #[schemars(title = "OrderAck|OrderAck")]
55 OrderAck(OrderAck),
56 #[serde(rename = "r")]
57 #[schemars(title = "OrderReject|OrderReject")]
58 OrderReject(OrderReject),
59 #[serde(rename = "o")]
60 #[schemars(title = "OrderOut|OrderOut")]
61 OrderOut(OrderOut),
62 #[serde(rename = "ox")]
63 #[schemars(title = "OrderReconciledOut|OrderOut")]
64 OrderReconciledOut(OrderOut),
65 #[serde(rename = "z")]
66 #[schemars(title = "OrderStale|OrderStale")]
67 OrderStale(OrderStale),
68 #[serde(rename = "xc")]
69 #[schemars(title = "CancelPending|Cancel")]
70 CancelPending(Cancel),
71 #[serde(rename = "xr")]
72 #[schemars(title = "CancelReject|CancelReject")]
73 CancelReject(CancelReject),
74 #[serde(rename = "xa")]
75 #[schemars(title = "OrderCanceling|OrderCanceling")]
76 OrderCanceling(OrderCanceling),
77 #[serde(rename = "xx")]
78 #[schemars(title = "OrderCanceled|OrderCanceled")]
79 OrderCanceled(OrderCanceled),
80 #[serde(rename = "mp")]
81 #[schemars(title = "ModifyPending|ModifyPending")]
82 ModifyPending(Modify),
83 #[serde(rename = "mr")]
84 #[schemars(title = "ModifyReject|ModifyReject")]
85 ModifyReject(ModifyReject),
86 #[serde(rename = "mm")]
87 #[schemars(title = "OrderModified|OrderModified")]
88 OrderModified(OrderModified),
89 #[serde(rename = "f")]
90 #[schemars(title = "Fill|Fill")]
91 Fill(Fill),
92 #[serde(rename = "af")]
93 #[schemars(title = "AberrantFill|AberrantFill")]
94 AberrantFill(AberrantFill),
95 #[serde(rename = "df")]
96 #[schemars(title = "DescendantFill|Fill")]
97 DescendantFill(Fill),
105}
106
107impl Orderflow {
108 pub fn order_id(&self) -> Option<OrderId> {
109 match self {
110 Orderflow::OrderPending(order) => Some(order.id),
111 Orderflow::OrderAck(ack) => Some(ack.order_id),
112 Orderflow::OrderReject(reject) => Some(reject.order_id),
113 Orderflow::OrderOut(out) => Some(out.order_id),
114 Orderflow::OrderReconciledOut(out) => Some(out.order_id),
115 Orderflow::OrderStale(stale) => Some(stale.order_id),
116 Orderflow::CancelPending(cancel) => Some(cancel.order_id),
117 Orderflow::CancelReject(reject) => Some(reject.order_id),
118 Orderflow::OrderCanceling(canceling) => Some(canceling.order_id),
119 Orderflow::OrderCanceled(canceled) => Some(canceled.order_id),
120 Orderflow::Fill(fill) => fill.order_id,
121 Orderflow::AberrantFill(aberrant_fill) => aberrant_fill.order_id,
122 Orderflow::ModifyPending(modify) => Some(modify.order_id),
123 Orderflow::ModifyReject(modify_reject) => Some(modify_reject.order_id),
124 Orderflow::OrderModified(order_modified) => Some(order_modified.order_id),
125 Orderflow::DescendantFill(fill) => fill.order_id,
126 }
127 }
128}
129
130#[grpc(package = "json.architect")]
132#[grpc(
133 service = "Orderflow",
134 name = "subscribe_orderflow",
135 response = "Orderflow",
136 server_streaming
137)]
138#[derive(Default, Debug, Clone, Serialize, Deserialize, JsonSchema)]
139pub struct SubscribeOrderflowRequest {
140 #[serde(default)]
141 pub execution_venue: Option<ExecutionVenue>,
142 #[serde(default)]
143 pub trader: Option<TraderIdOrEmail>,
144 #[serde(default)]
145 pub account: Option<AccountIdOrName>,
146}
147
148#[grpc(package = "json.architect")]
149#[grpc(service = "Orderflow", name = "dropcopy", response = "Dropcopy", server_streaming)]
150#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
151pub struct DropcopyRequest {
152 #[serde(default)]
153 pub execution_venue: Option<ExecutionVenue>,
154 #[serde(default)]
155 pub trader: Option<TraderIdOrEmail>,
156 #[serde(default)]
157 pub account: Option<AccountIdOrName>,
158 #[serde(default)]
159 pub orders: bool,
160 #[serde(default = "DropcopyRequest::default_fills")]
161 pub fills: bool,
162 #[serde(default)]
163 pub aberrant_fills: bool,
164}
165
166impl DropcopyRequest {
167 fn default_fills() -> bool {
168 true
169 }
170}
171
172#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
173#[serde(tag = "t")]
174pub enum Dropcopy {
176 #[serde(rename = "o")]
177 #[schemars(title = "Order|Order")]
178 Order(Order),
179 #[schemars(title = "Fill|Fill")]
180 #[serde(rename = "f")]
181 Fill(Fill),
182 #[serde(rename = "af")]
183 #[schemars(title = "AberrantFill|AberrantFill")]
184 AberrantFill(AberrantFill),
185}