bybit_rust_api/rest/announcements/
announcements_client.rs1use crate::rest::client::{RestClient, SecType, ServerResponse};
2use serde::Deserialize;
3use serde_json::json;
4
5#[derive(Clone)]
6pub struct AnnouncementsClient {
7 client: RestClient,
8}
9
10#[derive(Debug, Deserialize)]
11struct AnnouncementsResponse {
12 #[serde(rename = "retCode")]
13 ret_code: i32,
14 #[serde(rename = "retMsg")]
15 ret_msg: String,
16 #[serde(rename = "result", default)]
17 result: serde_json::Value,
18 #[serde(rename = "retExtInfo")]
19 ret_ext_info: serde_json::Value,
20 #[serde(rename = "time")]
21 time: i64,
22}
23
24impl From<AnnouncementsResponse> for ServerResponse<serde_json::Value> {
25 fn from(r: AnnouncementsResponse) -> Self {
26 ServerResponse {
27 ret_code: r.ret_code,
28 ret_msg: r.ret_msg,
29 result: r.result,
30 ret_ext_info: r.ret_ext_info,
31 time: r.time,
32 }
33 }
34}
35
36impl AnnouncementsClient {
37 pub fn new(client: RestClient) -> Self {
38 AnnouncementsClient { client }
39 }
40
41 pub async fn get_announcements(
44 &self,
45 locale: Option<&str>,
46 type_list: Option<&str>,
47 tag: Option<&str>,
48 page: Option<i32>,
49 limit: Option<i32>,
50 ) -> crate::rest::BybitResult<ServerResponse<serde_json::Value>> {
51 let endpoint = "v5/announcements/index";
52 let mut params = json!({});
53
54 if let Some(locale) = locale {
55 params["locale"] = json!(locale);
56 }
57 if let Some(type_list) = type_list {
58 params["type"] = json!(type_list);
59 }
60 if let Some(tag) = tag {
61 params["tag"] = json!(tag);
62 }
63 if let Some(page) = page {
64 params["page"] = json!(page);
65 }
66 if let Some(limit) = limit {
67 params["limit"] = json!(limit);
68 }
69
70 self.client.get(endpoint, params, SecType::None).await
71 }
72}
73
74#[cfg(test)]
75mod tests {
76 use super::*;
77 use crate::rest::ApiKeyPair;
78
79 fn create_test_client() -> AnnouncementsClient {
80 let api_key_pair = ApiKeyPair::new(
81 "test".to_string(),
82 "test_key".to_string(),
83 "test_secret".to_string(),
84 );
85 let rest_client =
86 RestClient::new(api_key_pair, "https://api-testnet.bybit.com".to_string());
87 AnnouncementsClient::new(rest_client)
88 }
89
90 #[test]
91 fn test_announcements_client_creation() {
92 let _client = create_test_client();
93 }
94
95 #[tokio::test]
96 async fn test_get_announcements_params() {
97 let locale = Some("en-US");
98 let type_list = Some("new_crypto");
99 let tag = Some("Spot");
100 let page = Some(1);
101 let limit = Some(20);
102
103 assert_eq!(locale, Some("en-US"));
104 assert_eq!(type_list, Some("new_crypto"));
105 assert_eq!(tag, Some("Spot"));
106 assert_eq!(page, Some(1));
107 assert_eq!(limit, Some(20));
108 }
109}