deribit_websocket/message/
request.rs1use crate::model::{quote::*, ws_types::JsonRpcRequest};
4
5#[derive(Debug, Clone)]
7pub struct RequestBuilder {
8 id_counter: u64,
9}
10
11impl Default for RequestBuilder {
12 fn default() -> Self {
13 Self::new()
14 }
15}
16
17impl RequestBuilder {
18 pub fn new() -> Self {
20 Self { id_counter: 1 }
21 }
22
23 pub fn build_request(
25 &mut self,
26 method: &str,
27 params: Option<serde_json::Value>,
28 ) -> JsonRpcRequest {
29 let id = self.id_counter;
30 self.id_counter += 1;
31
32 JsonRpcRequest {
33 jsonrpc: "2.0".to_string(),
34 id: serde_json::Value::Number(serde_json::Number::from(id)),
35 method: method.to_string(),
36 params,
37 }
38 }
39
40 pub fn build_auth_request(&mut self, client_id: &str, client_secret: &str) -> JsonRpcRequest {
42 let params = serde_json::json!({
43 "grant_type": "client_credentials",
44 "client_id": client_id,
45 "client_secret": client_secret
46 });
47
48 self.build_request("public/auth", Some(params))
49 }
50
51 pub fn build_subscribe_request(&mut self, channels: Vec<String>) -> JsonRpcRequest {
53 let params = serde_json::json!({
54 "channels": channels
55 });
56
57 self.build_request("public/subscribe", Some(params))
58 }
59
60 pub fn build_unsubscribe_request(&mut self, channels: Vec<String>) -> JsonRpcRequest {
62 let params = serde_json::json!({
63 "channels": channels
64 });
65
66 self.build_request("public/unsubscribe", Some(params))
67 }
68
69 pub fn build_test_request(&mut self) -> JsonRpcRequest {
71 self.build_request("public/test", None)
72 }
73
74 pub fn build_get_time_request(&mut self) -> JsonRpcRequest {
76 self.build_request("public/get_time", None)
77 }
78
79 pub fn build_mass_quote_request(&mut self, request: MassQuoteRequest) -> JsonRpcRequest {
81 let params = serde_json::to_value(request).expect("Failed to serialize mass quote request");
82
83 self.build_request("private/mass_quote", Some(params))
84 }
85
86 pub fn build_cancel_quotes_request(&mut self, request: CancelQuotesRequest) -> JsonRpcRequest {
88 let params =
89 serde_json::to_value(request).expect("Failed to serialize cancel quotes request");
90
91 self.build_request("private/cancel_quotes", Some(params))
92 }
93
94 pub fn build_set_mmp_config_request(&mut self, config: MmpGroupConfig) -> JsonRpcRequest {
96 let mut params = serde_json::json!({
97 "mmp_group": config.mmp_group,
98 "quantity_limit": config.quantity_limit,
99 "delta_limit": config.delta_limit,
100 "interval": config.interval,
101 "frozen_time": config.frozen_time
102 });
103
104 if config.interval == 0 {
106 params["interval"] = serde_json::Value::Number(serde_json::Number::from(0));
107 }
108
109 self.build_request("private/set_mmp_config", Some(params))
110 }
111
112 pub fn build_get_mmp_config_request(&mut self, mmp_group: Option<String>) -> JsonRpcRequest {
114 let params = if let Some(group) = mmp_group {
115 serde_json::json!({
116 "mmp_group": group
117 })
118 } else {
119 serde_json::json!({})
120 };
121
122 self.build_request("private/get_mmp_config", Some(params))
123 }
124
125 pub fn build_reset_mmp_request(&mut self, mmp_group: Option<String>) -> JsonRpcRequest {
127 let params = if let Some(group) = mmp_group {
128 serde_json::json!({
129 "mmp_group": group
130 })
131 } else {
132 serde_json::json!({})
133 };
134
135 self.build_request("private/reset_mmp", Some(params))
136 }
137
138 pub fn build_get_open_orders_request(
140 &mut self,
141 currency: Option<String>,
142 kind: Option<String>,
143 type_filter: Option<String>,
144 ) -> JsonRpcRequest {
145 let mut params = serde_json::json!({});
146
147 if let Some(currency) = currency {
148 params["currency"] = serde_json::Value::String(currency);
149 }
150 if let Some(kind) = kind {
151 params["kind"] = serde_json::Value::String(kind);
152 }
153 if let Some(type_filter) = type_filter {
154 params["type"] = serde_json::Value::String(type_filter);
155 }
156
157 self.build_request("private/get_open_orders", Some(params))
158 }
159}