xapi_binance/common/
payload.rs

1use serde::Serialize;
2use xapi_shared::ws::{error::SharedWsError, payload::SharedWsApiPayloadTrait};
3
4#[derive(Debug, Serialize)]
5pub struct BnWsApiPayload {
6    pub id: String,
7    pub method: String,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub params: Option<serde_json::Value>,
10}
11
12impl SharedWsApiPayloadTrait<String> for BnWsApiPayload {
13    fn get_id(&self) -> &String {
14        &self.id
15    }
16
17    fn serialize(&self) -> Result<String, SharedWsError> {
18        serde_json::to_string(self)
19            .inspect_err(|err| {
20                tracing::error!(?err, "failed to serialize BnWsApiPayload");
21            })
22            .map_err(|err| SharedWsError::SerdeError(err.to_string()))
23    }
24}
25
26#[derive(Debug, Serialize)]
27pub struct BnWsStreamPayload {
28    pub id: String,
29    pub method: BnWsStreamMethod,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub params: Option<serde_json::Value>,
32}
33
34#[derive(Debug, Serialize)]
35#[serde(rename_all = "UPPERCASE")]
36pub enum BnWsStreamMethod {
37    Subscribe,
38}
39
40impl SharedWsApiPayloadTrait<String> for BnWsStreamPayload {
41    fn get_id(&self) -> &String {
42        &self.id
43    }
44
45    fn serialize(&self) -> Result<String, SharedWsError> {
46        serde_json::to_string(self)
47            .inspect_err(|err| {
48                tracing::error!(?err, "failed to serialize BnWsStreamPayload");
49            })
50            .map_err(|err| SharedWsError::SerdeError(err.to_string()))
51    }
52}