bybit_rust_api/rest/announcements/
announcements_client.rs

1use crate::rest::client::{RestClient, SecType, ServerResponse};
2use anyhow::Result;
3use serde_json::json;
4
5pub struct AnnouncementsClient {
6    client: RestClient,
7}
8
9impl AnnouncementsClient {
10    pub fn new(client: RestClient) -> Self {
11        AnnouncementsClient { client }
12    }
13
14    /// Get announcements
15    /// https://bybit-exchange.github.io/docs/v5/announcement
16    pub async fn get_announcements(
17        &self,
18        locale: Option<&str>,
19        type_list: Option<&str>,
20        tag: Option<&str>,
21        page: Option<i32>,
22        limit: Option<i32>,
23    ) -> Result<ServerResponse<serde_json::Value>> {
24        let endpoint = "v5/announcements/index";
25        let mut params = json!({});
26
27        if let Some(locale) = locale {
28            params["locale"] = json!(locale);
29        }
30        if let Some(type_list) = type_list {
31            params["type"] = json!(type_list);
32        }
33        if let Some(tag) = tag {
34            params["tag"] = json!(tag);
35        }
36        if let Some(page) = page {
37            params["page"] = json!(page);
38        }
39        if let Some(limit) = limit {
40            params["limit"] = json!(limit);
41        }
42
43        let response = self.client.get(endpoint, params, SecType::None).await?;
44        Ok(response)
45    }
46}
47
48#[cfg(test)]
49mod tests {
50    use super::*;
51    use crate::rest::ApiKeyPair;
52
53    fn create_test_client() -> AnnouncementsClient {
54        let api_key_pair = ApiKeyPair::new(
55            "test".to_string(),
56            "test_key".to_string(),
57            "test_secret".to_string(),
58        );
59        let rest_client = RestClient::new(
60            api_key_pair,
61            "https://api-testnet.bybit.com".to_string(),
62            false,
63        );
64        AnnouncementsClient::new(rest_client)
65    }
66
67    #[test]
68    fn test_announcements_client_creation() {
69        let _client = create_test_client();
70    }
71
72    #[tokio::test]
73    async fn test_get_announcements_params() {
74        let locale = Some("en-US");
75        let type_list = Some("new_crypto");
76        let tag = Some("Spot");
77        let page = Some(1);
78        let limit = Some(20);
79
80        assert_eq!(locale, Some("en-US"));
81        assert_eq!(type_list, Some("new_crypto"));
82        assert_eq!(tag, Some("Spot"));
83        assert_eq!(page, Some(1));
84        assert_eq!(limit, Some(20));
85    }
86}