use crate::api::api_trait::OkxApiTrait;
use crate::client::OkxClient;
use crate::enums::language_enums::Language;
use crate::Error;
use reqwest::Method;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct AnnouncementDetail {
#[serde(rename = "annType")]
pub ann_type: String,
#[serde(rename = "pTime")]
pub p_time: String,
pub title: String,
pub url: String,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct AnnouncementPage {
pub details: Vec<AnnouncementDetail>,
#[serde(rename = "totalPage")]
pub total_page: String,
}
pub struct OkxAnnouncements {
client: OkxClient,
}
impl OkxApiTrait for OkxAnnouncements {
fn new(client: OkxClient) -> Self {
Self { client }
}
fn client(&self) -> &OkxClient {
&self.client
}
}
impl OkxAnnouncements {
pub fn from_env() -> Result<Self, Error> {
let client = OkxClient::from_env()?;
Ok(Self { client })
}
pub async fn get_announcements(
&self,
ann_type: Option<String>,
page: Option<String>,
language: Option<Language>,
) -> Result<Vec<AnnouncementPage>, Error> {
let path = "/api/v5/support/announcements";
let mut body = String::new();
if let Some(t) = ann_type {
body.push_str(&format!("annType={}", t));
}
if let Some(p) = page {
if !body.is_empty() {
body.push('&');
}
body.push_str(&format!("page={}", p));
}
let mut client = self.client.clone();
if let Some(l) = language {
client.set_accept_language(l);
}
println!("body: {}", body);
let res = client
.send_request::<Vec<AnnouncementPage>>(Method::GET, path, &body)
.await?;
println!("res: {:?}", res);
Ok(res)
}
}