xapi-binance 0.0.1

Binance API client
Documentation
use serde::Serialize;
use xapi_shared::ws::{error::SharedWsError, payload::SharedWsApiPayloadTrait};

#[derive(Debug, Serialize)]
pub struct BnWsApiPayload {
    pub id: String,
    pub method: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub params: Option<serde_json::Value>,
}

impl SharedWsApiPayloadTrait<String> for BnWsApiPayload {
    fn get_id(&self) -> &String {
        &self.id
    }

    fn serialize(&self) -> Result<String, SharedWsError> {
        serde_json::to_string(self)
            .inspect_err(|err| {
                tracing::error!(?err, "failed to serialize BnWsApiPayload");
            })
            .map_err(|err| SharedWsError::SerdeError(err.to_string()))
    }
}

#[derive(Debug, Serialize)]
pub struct BnWsStreamPayload {
    pub id: String,
    pub method: BnWsStreamMethod,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub params: Option<serde_json::Value>,
}

#[derive(Debug, Serialize)]
#[serde(rename_all = "UPPERCASE")]
pub enum BnWsStreamMethod {
    Subscribe,
}

impl SharedWsApiPayloadTrait<String> for BnWsStreamPayload {
    fn get_id(&self) -> &String {
        &self.id
    }

    fn serialize(&self) -> Result<String, SharedWsError> {
        serde_json::to_string(self)
            .inspect_err(|err| {
                tracing::error!(?err, "failed to serialize BnWsStreamPayload");
            })
            .map_err(|err| SharedWsError::SerdeError(err.to_string()))
    }
}