architect_api/cpty/
mod.rs

1use 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")]
16/// <!-- py: tag=t -->
17pub 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")]
39/// <!-- py: tag=t -->
40pub 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    /// UNIX epoch time or -1 for never
87    pub last_heartbeat: i64,
88    /// Stale threshold in seconds, or -1 for never stale
89    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}