architect_api/cpty/
mod.rs1use crate::{
2 folio::{AccountBalances, AccountPositions, AccountStatistics},
3 orderflow::{Cancel, Order},
4 symbology::{ExecutionInfo, ExecutionVenue, TradableProduct},
5 AccountId, AccountIdOrName, UserId,
6};
7use derive::grpc;
8use schemars::JsonSchema;
9use serde::{Deserialize, Serialize};
10use std::collections::BTreeMap;
11
12#[grpc(package = "json.architect")]
13#[grpc(service = "Cpty", name = "cpty", response = "CptyResponse", server_streaming)]
14#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
15#[serde(tag = "t", rename_all = "snake_case")]
16pub enum CptyRequest {
18 #[schemars(title = "Login|CptyLoginRequest")]
19 Login(CptyLoginRequest),
20 #[schemars(title = "Logout|CptyLogoutRequest")]
21 Logout(CptyLogoutRequest),
22 #[schemars(title = "PlaceOrder|Order")]
23 PlaceOrder(Order),
24 #[schemars(title = "CancelOrder")]
25 CancelOrder { cancel: Cancel, original_order: Option<Order> },
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
29pub struct CptyLoginRequest {
30 pub trader: UserId,
31 pub account: AccountId,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
35pub struct CptyLogoutRequest {}
36
37#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
38#[serde(tag = "t", rename_all = "snake_case")]
39pub enum CptyResponse {
41 #[serde(rename = "xs")]
42 #[schemars(title = "Symbology")]
43 Symbology {
44 execution_info:
45 BTreeMap<TradableProduct, BTreeMap<ExecutionVenue, ExecutionInfo>>,
46 },
47 #[serde(rename = "ro")]
48 #[schemars(title = "ReconcileOrder|Order")]
49 ReconcileOrder(Order),
50 #[serde(rename = "oo")]
51 #[schemars(title = "ReconcileOpenOrders")]
52 ReconcileOpenOrders {
53 orders: Vec<Order>,
54 snapshot_for_account: Option<AccountIdOrName>,
55 },
56 #[serde(rename = "as")]
57 #[schemars(title = "UpdateAccountSummary")]
58 UpdateAccountSummary {
59 account: AccountIdOrName,
60 timestamp: i64,
61 timestamp_ns: u32,
62 #[serde(default)]
63 balances: Option<AccountBalances>,
64 #[serde(default)]
65 positions: Option<AccountPositions>,
66 #[serde(default)]
67 statistics: Option<AccountStatistics>,
68 is_snapshot: bool,
69 },
70}
71
72#[grpc(package = "json.architect")]
73#[grpc(service = "Cpty", name = "cpty_status", response = "CptyStatus")]
74#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
75pub struct CptyStatusRequest {
76 pub kind: String,
77 pub instance: Option<String>,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
81pub struct CptyStatus {
82 pub kind: String,
83 pub instance: Option<String>,
84 pub connected: bool,
85 pub logged_in: bool,
86 pub last_heartbeat: i64,
88 pub last_heartbeat_stale_threshold: i64,
90}
91
92#[grpc(package = "json.architect")]
93#[grpc(service = "Cpty", name = "cptys", response = "CptysResponse")]
94#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
95pub struct CptysRequest {}
96
97#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
98pub struct CptysResponse {
99 pub cptys: Vec<CptyStatus>,
100}