Skip to main content

bat_markets_core/
command.rs

1use serde::{Deserialize, Serialize};
2
3use crate::ids::{ClientOrderId, InstrumentId, OrderId, RequestId};
4use crate::primitives::TimestampMs;
5use crate::reconcile::ReconcileReport;
6use crate::types::{Product, Venue};
7
8/// Supported command-lane operations in `0.1.x`.
9#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
10#[serde(rename_all = "snake_case")]
11pub enum CommandOperation {
12    CreateOrder,
13    CreateOrders,
14    AmendOrder,
15    AmendOrders,
16    CancelOrder,
17    CancelOrders,
18    CancelAllOrders,
19    ClosePosition,
20    ValidateOrder,
21    GetOrder,
22    SetLeverage,
23    SetMarginMode,
24    SetPositionMode,
25}
26
27/// Result of command classification.
28#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
29#[serde(rename_all = "snake_case")]
30pub enum CommandStatus {
31    Accepted,
32    Rejected,
33    UnknownExecution,
34}
35
36/// Command-lane output suitable for state hints and caller handling.
37#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
38pub struct CommandReceipt {
39    pub operation: CommandOperation,
40    pub status: CommandStatus,
41    pub venue: Venue,
42    pub product: Product,
43    pub instrument_id: Option<InstrumentId>,
44    pub order_id: Option<OrderId>,
45    pub client_order_id: Option<ClientOrderId>,
46    pub request_id: Option<RequestId>,
47    pub message: Option<Box<str>>,
48    pub native_code: Option<Box<str>>,
49    pub retriable: bool,
50}
51
52/// Transport path chosen for a command attempt.
53#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
54#[serde(rename_all = "snake_case")]
55pub enum CommandTransport {
56    Auto,
57    Rest,
58    WebSocket,
59}
60
61/// Fast acknowledgement returned on the command hot path.
62#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
63pub struct CommandAck {
64    pub receipt: CommandReceipt,
65    pub transport: CommandTransport,
66    pub acknowledged_at: TimestampMs,
67}
68
69/// Lifecycle notifications for low-latency command tracking.
70#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
71#[serde(rename_all = "snake_case")]
72pub enum CommandLifecycleEvent {
73    Ack(CommandAck),
74    Receipt(CommandReceipt),
75    RecoveryScheduled(CommandAck),
76    RecoveryCompleted {
77        ack: CommandAck,
78        report: ReconcileReport,
79    },
80}