xapi_binance/common/
payload.rs1use 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}