rusty_feeder/exchange/bybit/
types.rs

1use crate::provider::prelude::*;
2
3/// Bybit API rate limits
4pub const BYBIT_RATE_LIMITS: &[RateLimit] = &[
5    RateLimit {
6        limit_type: "REQUEST_WEIGHT",
7        interval: "MINUTE",
8        interval_num: 1,
9        limit: 120,
10    },
11    RateLimit {
12        limit_type: "ORDERS",
13        interval: "MINUTE",
14        interval_num: 1,
15        limit: 60,
16    },
17];
18
19// Base WebSocket URLs (v5 API)
20/// Bybit WebSocket base URL for public spot data
21pub const BYBIT_WS_URL_SPOT: &str = "wss://stream.bybit.com/v5/public/spot";
22/// Bybit WebSocket base URL for public linear perpetuals & futures data
23pub const BYBIT_WS_URL_LINEAR: &str = "wss://stream.bybit.com/v5/public/linear";
24/// Bybit WebSocket base URL for public inverse contract data
25pub const BYBIT_WS_URL_INVERSE: &str = "wss://stream.bybit.com/v5/public/inverse";
26/// Bybit WebSocket base URL for public spread trading data
27pub const BYBIT_WS_URL_SPREAD: &str = "wss://stream.bybit.com/v5/public/spread";
28/// Bybit WebSocket base URL for public options data
29pub const BYBIT_WS_URL_OPTION: &str = "wss://stream.bybit.com/v5/public/option";
30/// Bybit WebSocket base URL for private data (all categories)
31pub const BYBIT_WS_URL_PRIVATE: &str = "wss://stream.bybit.com/v5/private";
32/// Bybit WebSocket base URL for trade/order entry
33pub const BYBIT_WS_URL_TRADE: &str = "wss://stream.bybit.com/v5/trade";
34
35/// Bybit REST API base URL
36pub const BYBIT_API_URL: &str = "https://api.bybit.com";
37
38/// Bybit WebSocket message types
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum BybitMessageType {
41    /// WebSocket subscription was successful
42    SubscriptionSuccess,
43    /// WebSocket subscription failed
44    SubscriptionFailure,
45    /// WebSocket unsubscribe was successful
46    UnsubscribeSuccess,
47    /// Trade data message
48    Trade,
49    /// Order book data message
50    OrderBook,
51    /// Ping message from server
52    Ping,
53    /// Pong response message
54    Pong,
55    /// Error message from server
56    Error,
57    /// Unknown message type
58    Unknown,
59}
60
61impl From<&str> for BybitMessageType {
62    fn from(s: &str) -> Self {
63        match s {
64            "subscribe" => Self::SubscriptionSuccess,
65            "unsubscribe" => Self::UnsubscribeSuccess,
66            "trade" => Self::Trade,
67            "orderBook" => Self::OrderBook,
68            "ping" => Self::Ping,
69            "pong" => Self::Pong,
70            "error" => Self::Error,
71            _ => Self::Unknown,
72        }
73    }
74}