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()))
}
}