polynode 0.13.2

Rust SDK for the PolyNode API — real-time Polymarket data
Documentation
//! WebSocket message types for system messages and event wrapping.

use serde::Deserialize;
use super::events::{PolyNodeEvent, PriceFeedEvent};

/// What the user receives from the WebSocket stream.
#[derive(Debug, Clone)]
pub enum WsMessage {
    /// A decoded event from the stream.
    Event(PolyNodeEvent),
    /// A Chainlink price feed event.
    PriceFeed(PriceFeedEvent),
    /// Snapshot of recent events on subscribe.
    Snapshot(Vec<serde_json::Value>),
    /// Subscription confirmed by server.
    Subscribed {
        subscription_id: String,
        subscription_type: String,
        warnings: Vec<String>,
    },
    /// Subscription removed.
    Unsubscribed {
        subscriber_id: String,
    },
    /// Server heartbeat.
    Heartbeat {
        ts: i64,
    },
    /// Server error.
    Error {
        code: Option<String>,
        message: String,
    },
}

/// Raw server message for internal parsing.
#[derive(Debug, Deserialize)]
pub(crate) struct RawWsMessage {
    #[serde(rename = "type")]
    pub msg_type: String,
    #[serde(default)]
    #[allow(dead_code)]
    pub timestamp: Option<i64>,
    #[serde(default)]
    pub data: Option<serde_json::Value>,
    // Subscribed fields
    #[serde(default)]
    pub subscriber_id: Option<String>,
    #[serde(default)]
    pub subscription_id: Option<String>,
    #[serde(default)]
    pub subscription_type: Option<String>,
    #[serde(default)]
    pub warnings: Option<Vec<String>>,
    // Heartbeat
    #[serde(default)]
    pub ts: Option<i64>,
    // Error
    #[serde(default)]
    pub code: Option<String>,
    #[serde(default)]
    pub message: Option<String>,
    // Snapshot
    #[serde(default)]
    #[allow(dead_code)]
    pub count: Option<u64>,
    #[serde(default)]
    pub events: Option<Vec<serde_json::Value>>,
    // Price feed
    #[serde(default)]
    #[allow(dead_code)]
    pub feed: Option<String>,
}