xapi_okx/common/
payload.rs1use serde::Serialize;
2use xapi_shared::ws::{error::SharedWsError, payload::SharedWsApiPayloadTrait};
3
4#[derive(Debug, Serialize)]
5pub struct OkxWsStreamPayload {
6 pub id: String,
7 #[serde(rename = "op")]
8 pub operation: OkxWsStreamOperation,
9 pub args: serde_json::Value,
10}
11
12#[derive(Debug, Serialize)]
13#[serde(rename_all = "lowercase")]
14pub enum OkxWsStreamOperation {
15 Subscribe,
16 Unsubscribe,
17}
18
19impl SharedWsApiPayloadTrait<String> for OkxWsStreamPayload {
20 fn get_id(&self) -> &String {
21 &self.id
22 }
23
24 fn serialize(&self) -> Result<String, SharedWsError> {
25 serde_json::to_string(self)
26 .inspect_err(|err| {
27 tracing::error!(?err, "failed to serialize OkxWsStreamPayload");
28 })
29 .map_err(|err| SharedWsError::SerdeError(err.to_string()))
30 }
31}