deribit_http/message/
request.rs1use crate::model::request::api_request::HttpRequest;
4use crate::model::types::RequestParams;
5use pretty_simple_display::{DebugPretty, DisplaySimple};
6use serde::{Deserialize, Serialize};
7use std::collections::HashMap;
8
9#[derive(DebugPretty, DisplaySimple, Clone, Serialize, Deserialize)]
11pub struct HttpRequestBuilder {
12 base_url: String,
13}
14
15impl HttpRequestBuilder {
16 pub fn new(base_url: String) -> Self {
18 Self { base_url }
19 }
20
21 pub fn build_get(&self, endpoint: &str, params: Option<RequestParams>) -> HttpRequest {
23 let mut url = format!("{}{}", self.base_url, endpoint);
24
25 if let Some(params) = params
26 && !params.is_empty()
27 {
28 let query_string = self.params_to_query_string(¶ms);
30 url.push('?');
31 url.push_str(&query_string);
32 }
33
34 HttpRequest {
35 method: "GET".to_string(),
36 endpoint: url,
37 headers: self.default_headers(),
38 body: None,
39 }
40 }
41
42 pub fn build_post(&self, endpoint: &str, params: Option<RequestParams>) -> HttpRequest {
44 let url = format!("{}{}", self.base_url, endpoint);
45 let body = params.map(|p| p.to_json().to_string());
46
47 HttpRequest {
48 method: "POST".to_string(),
49 endpoint: url,
50 headers: self.default_headers(),
51 body,
52 }
53 }
54
55 pub fn build_auth_request(&self, client_id: &str, client_secret: &str) -> HttpRequest {
57 let params = RequestParams::new()
58 .add("grant_type", "client_credentials")
59 .add("client_id", client_id)
60 .add("client_secret", client_secret);
61
62 self.build_post("/public/auth", Some(params))
63 }
64
65 pub fn build_test_request(&self) -> HttpRequest {
67 self.build_get("/public/test", None)
68 }
69
70 pub fn build_get_time_request(&self) -> HttpRequest {
72 self.build_get("/public/get_time", None)
73 }
74
75 fn default_headers(&self) -> HashMap<String, String> {
77 let mut headers = HashMap::new();
78 headers.insert("Content-Type".to_string(), "application/json".to_string());
79 headers.insert("Accept".to_string(), "application/json".to_string());
80 headers
81 }
82
83 fn params_to_query_string(&self, _params: &RequestParams) -> String {
85 String::new()
87 }
88}