rusty_feeder/exchange/coinbase/
types.rs1use crate::provider::prelude::*;
2
3pub const COINBASE_RATE_LIMITS: &[RateLimit] = &[
5 RateLimit {
6 limit_type: "RAW_REQUESTS",
7 interval: "MINUTE",
8 interval_num: 1,
9 limit: 100,
10 },
11 RateLimit {
12 limit_type: "ORDERS",
13 interval: "MINUTE",
14 interval_num: 1,
15 limit: 30,
16 },
17];
18
19pub const COINBASE_WS_FEED_URL: &str = "wss://ws-feed.exchange.coinbase.com";
22pub const COINBASE_WS_DIRECT_URL: &str = "wss://ws-direct.exchange.coinbase.com";
24pub const COINBASE_WS_ADVANCED_URL: &str = "wss://advanced-trade-ws.coinbase.com";
26pub const COINBASE_WS_SANDBOX_FEED_URL: &str = "wss://ws-feed-public.sandbox.exchange.coinbase.com";
28pub const COINBASE_WS_SANDBOX_DIRECT_URL: &str = "wss://ws-direct.sandbox.exchange.coinbase.com";
30
31pub const COINBASE_API_URL: &str = "https://api.exchange.coinbase.com";
33
34#[derive(Debug, PartialEq, Eq)]
36pub enum CoinbaseMessageType {
37 Subscription,
39 Ticker,
41 Level2Snapshot,
43 Level2Update,
45 TradeMatch,
47 Heartbeat,
49 Error,
51 Unknown,
53}
54
55impl From<&str> for CoinbaseMessageType {
56 fn from(s: &str) -> Self {
57 match s {
58 "subscriptions" => Self::Subscription,
59 "ticker" => Self::Ticker,
60 "snapshot" => Self::Level2Snapshot,
61 "l2update" => Self::Level2Update,
62 "match" | "last_match" => Self::TradeMatch,
63 "heartbeat" => Self::Heartbeat,
64 "error" => Self::Error,
65 _ => Self::Unknown,
66 }
67 }
68}