mexc_rs/spot/v3/
create_user_data_stream.rs

1use crate::spot::v3::{ApiResponse, ApiResult};
2use crate::spot::MexcSpotApiClientWithAuthentication;
3use async_trait::async_trait;
4use chrono::{DateTime, Utc};
5
6#[derive(Debug, serde::Serialize)]
7pub struct CreateUserDataStreamQuery {
8    #[serde(with = "chrono::serde::ts_milliseconds")]
9    timestamp: DateTime<Utc>,
10}
11
12#[derive(Debug, serde::Deserialize)]
13#[serde(rename_all = "camelCase")]
14pub struct CreateUserDataStreamOutput {
15    pub listen_key: String,
16}
17
18#[async_trait]
19pub trait CreateUserDataStreamEndpoint {
20    async fn create_user_data_stream(&self) -> ApiResult<CreateUserDataStreamOutput>;
21}
22
23#[async_trait]
24impl CreateUserDataStreamEndpoint for MexcSpotApiClientWithAuthentication {
25    async fn create_user_data_stream(&self) -> ApiResult<CreateUserDataStreamOutput> {
26        let url = format!("{}/api/v3/userDataStream", self.endpoint.as_ref());
27        let query = CreateUserDataStreamQuery {
28            timestamp: Utc::now(),
29        };
30        let query = self.sign_query(&query)?;
31        let response = self.reqwest_client.post(&url).query(&query).send().await?;
32        let api_response = response
33            .json::<ApiResponse<CreateUserDataStreamOutput>>()
34            .await?;
35        let output = api_response.into_api_result()?;
36
37        Ok(output)
38    }
39}