bat_markets_core/
command.rs1use 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#[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#[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#[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#[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#[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#[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}