Skip to main content

xapi_okx/common/
payload.rs

1use 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}