Skip to main content

bullet_ws_interface/
client.rs

1use serde::{Deserialize, Serialize};
2
3use crate::RequestId;
4
5/// Parameters for order operations
6#[derive(Serialize, Deserialize, Clone, Debug)]
7pub struct OrderParams {
8    /// Base64-encoded raw transaction bytes
9    pub tx: String,
10}
11
12/// Messages sent from client to server (Binance-style)
13#[derive(Serialize, Deserialize, Clone, Debug)]
14#[serde(tag = "method", rename_all = "SCREAMING_SNAKE_CASE")]
15pub enum ClientMessage {
16    #[serde(alias = "subscribe")]
17    Subscribe {
18        id: Option<RequestId>,
19        #[serde(default)]
20        params: Vec<String>,
21    },
22
23    #[serde(alias = "unsubscribe")]
24    Unsubscribe {
25        id: Option<RequestId>,
26        #[serde(default)]
27        params: Vec<String>,
28    },
29
30    #[serde(alias = "list_subscriptions")]
31    ListSubscriptions { id: Option<RequestId> },
32
33    #[serde(alias = "ping")]
34    Ping { id: Option<RequestId> },
35
36    /// Place an order via the rollup WebSocket
37    #[serde(alias = "order.place", rename = "ORDER.PLACE")]
38    OrderPlace {
39        id: Option<RequestId>,
40        params: OrderParams,
41    },
42
43    /// Cancel an order via the rollup WebSocket
44    #[serde(alias = "order.cancel", rename = "ORDER.CANCEL")]
45    OrderCancel {
46        id: Option<RequestId>,
47        params: OrderParams,
48    },
49
50    /// Amend an order via the rollup WebSocket
51    #[serde(alias = "order.amend", alias = "order.modify", rename = "ORDER.AMEND")]
52    OrderAmend {
53        id: Option<RequestId>,
54        params: OrderParams,
55    },
56
57    /// Cancel all open orders via the rollup WebSocket
58    #[serde(alias = "order.cancelAll", rename = "ORDER.CANCEL_ALL")]
59    OrderCancelAll {
60        id: Option<RequestId>,
61        params: OrderParams,
62    },
63}