polymarket_api/websocket/
messages.rs

1//! WebSocket subscription and control messages
2//!
3//! This module contains types for subscribing to and managing WebSocket connections
4//! to the Polymarket WebSocket API.
5
6use serde::{Deserialize, Serialize};
7
8/// Message sent to subscribe to market data
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct SubscriptionMessage {
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub auth: Option<Auth>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub markets: Option<Vec<String>>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub assets_ids: Option<Vec<String>>,
17    #[serde(rename = "type")]
18    pub channel_type: String,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub custom_feature_enabled: Option<bool>,
21}
22
23/// Authentication credentials for authenticated WebSocket connections
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct Auth {
26    pub api_key: String,
27    pub api_secret: String,
28    pub timestamp: String,
29    pub signature: String,
30}
31
32/// Message to update an existing subscription (subscribe or unsubscribe)
33#[derive(Debug, Clone, Serialize, Deserialize)]
34pub struct UpdateSubscriptionMessage {
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub assets_ids: Option<Vec<String>>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub markets: Option<Vec<String>>,
39    pub operation: String, // "subscribe" or "unsubscribe"
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub custom_feature_enabled: Option<bool>,
42}
43
44/// Confirmation message received after successful subscription
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct SubscribedMessage {
47    pub message: String,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub assets_ids: Option<Vec<String>>,
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub markets: Option<Vec<String>>,
52}