mexc_rs/spot/v3/
create_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, 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}