rusftx 0.4.0

Rust bindings for the FTX REST and Websocket API
Documentation
use crate::ws::message::{Channel, Operation, WebSocketApiMessage};

#[derive(Debug, builder_pattern::Builder)]
pub struct SubscribeMessage {
    #[into]
    #[default(None)]
    pub market: Option<String>,
    pub channel: Channel,
}

impl WebSocketApiMessage for SubscribeMessage {}

impl serde::ser::Serialize for SubscribeMessage {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: serde::ser::Serializer,
    {
        use serde::ser::SerializeStruct;

        let mut state = serializer.serialize_struct("SubscribeMessage", 3)?;
        state.serialize_field("op", &Operation::Subscribe)?;
        state.serialize_field("channel", &self.channel)?;
        if let Some(market) = &self.market {
            state.serialize_field("market", market)?;
        }
        state.end()
    }
}