mexc_rs/spot/v3/
keep_alive_user_data_stream.rs1use crate::spot::v3::{ApiResponse, ApiResult};
2use crate::spot::MexcSpotApiClientWithAuthentication;
3use async_trait::async_trait;
4use chrono::{DateTime, Utc};
5
6#[derive(Debug)]
7pub struct KeepAliveUserDataStreamParams<'a> {
8 pub listen_key: &'a str,
9}
10
11#[derive(Debug, serde::Serialize)]
12#[serde(rename_all = "camelCase")]
13pub struct KeepAliveUserDataStreamQuery<'a> {
14 #[serde(with = "chrono::serde::ts_milliseconds")]
15 timestamp: DateTime<Utc>,
16 listen_key: &'a str,
17}
18
19#[derive(Debug, serde::Deserialize)]
20#[serde(rename_all = "camelCase")]
21pub struct KeepAliveUserDataStreamOutput {
22 pub listen_key: String,
23}
24
25#[async_trait]
26pub trait KeepAliveUserDataStreamEndpoint {
27 async fn keep_alive_user_data_stream(
28 &self,
29 params: KeepAliveUserDataStreamParams<'_>,
30 ) -> ApiResult<KeepAliveUserDataStreamOutput>;
31}
32
33#[async_trait]
34impl KeepAliveUserDataStreamEndpoint for MexcSpotApiClientWithAuthentication {
35 async fn keep_alive_user_data_stream(
36 &self,
37 params: KeepAliveUserDataStreamParams<'_>,
38 ) -> ApiResult<KeepAliveUserDataStreamOutput> {
39 let url = format!("{}/api/v3/userDataStream", self.endpoint.as_ref());
40 let query = KeepAliveUserDataStreamQuery {
41 timestamp: Utc::now(),
42 listen_key: params.listen_key,
43 };
44 let query = self.sign_query(&query)?;
45 let response = self.reqwest_client.put(&url).query(&query).send().await?;
46 let api_response = response
47 .json::<ApiResponse<KeepAliveUserDataStreamOutput>>()
48 .await?;
49 let output = api_response.into_api_result()?;
50
51 Ok(output)
52 }
53}