1use super::HingeClient;
2use crate::errors::HingeError;
3use crate::logging::log_request;
4use crate::storage::Storage;
5
6impl<S: Storage + Clone> HingeClient<S> {
7 pub async fn raw_hinge_json(
8 &self,
9 method: reqwest::Method,
10 path_or_url: &str,
11 body: Option<serde_json::Value>,
12 ) -> Result<serde_json::Value, HingeError> {
13 let url = if path_or_url.starts_with("http://") || path_or_url.starts_with("https://") {
14 path_or_url.to_string()
15 } else {
16 format!(
17 "{}/{}",
18 self.settings.base_url.trim_end_matches('/'),
19 path_or_url.trim_start_matches('/')
20 )
21 };
22 let headers = self.default_headers()?;
23 log_request(method.as_str(), &url, &headers, body.as_ref());
24 let mut request = self.http.request(method, &url).headers(headers);
25 if let Some(body) = body {
26 request = request.json(&body);
27 }
28 let res = request.send().await?;
29 self.parse_response(res).await
30 }
31
32 pub async fn raw_sendbird_json(
33 &self,
34 method: reqwest::Method,
35 path_or_url: &str,
36 body: Option<serde_json::Value>,
37 ) -> Result<serde_json::Value, HingeError> {
38 let url = if path_or_url.starts_with("http://") || path_or_url.starts_with("https://") {
39 path_or_url.to_string()
40 } else {
41 format!(
42 "{}/v3/{}",
43 self.settings.sendbird_api_url.trim_end_matches('/'),
44 path_or_url.trim_start_matches('/')
45 )
46 };
47 let mut headers = self.sendbird_headers()?;
48 if body.is_some() {
49 headers.insert(
50 reqwest::header::CONTENT_TYPE,
51 reqwest::header::HeaderValue::from_static("application/json"),
52 );
53 }
54 log_request(method.as_str(), &url, &headers, body.as_ref());
55 let mut request = self.http.request(method, &url).headers(headers);
56 if let Some(body) = body {
57 request = request.json(&body);
58 }
59 let res = request.send().await?;
60 self.parse_response(res).await
61 }
62}