rusty_feeder/exchange/coinbase/data/
subscription_converter.rs1use smallvec::SmallVec;
7use smartstring::alias::String;
8
9use super::subscription::{SubscriptionChannel, SubscriptionMessage};
10use crate::provider::prelude::*;
11
12#[inline]
14pub fn options_to_coinbase_subscription(options: &SubscriptionOptions) -> SubscriptionMessage {
15 match options.subscription_type {
16 SubscriptionType::Trade => create_trade_subscription(options.symbols.clone()),
17 SubscriptionType::OrderBook => create_orderbook_subscription(options.symbols.clone()),
18 SubscriptionType::Ticker => create_ticker_subscription(options.symbols.clone()),
19 SubscriptionType::UserData => create_heartbeat_subscription(options.symbols.clone()),
21 _ => {
22 SubscriptionMessage::new(vec![])
24 }
25 }
26}
27
28#[inline]
30pub fn create_trade_subscription(symbols: SmallVec<[String; 8]>) -> SubscriptionMessage {
31 let channel = SubscriptionChannel {
32 name: "matches".into(),
33 product_ids: symbols.to_vec(),
34 };
35
36 SubscriptionMessage::new(vec![channel])
37}
38
39#[inline]
41pub fn create_orderbook_subscription(symbols: SmallVec<[String; 8]>) -> SubscriptionMessage {
42 let channel = SubscriptionChannel {
43 name: "level2".into(),
44 product_ids: symbols.to_vec(),
45 };
46
47 SubscriptionMessage::new(vec![channel])
48}
49
50#[inline]
52pub fn create_ticker_subscription(symbols: SmallVec<[String; 8]>) -> SubscriptionMessage {
53 let channel = SubscriptionChannel {
54 name: "ticker".into(),
55 product_ids: symbols.to_vec(),
56 };
57
58 SubscriptionMessage::new(vec![channel])
59}
60
61#[inline]
63pub fn create_heartbeat_subscription(symbols: SmallVec<[String; 8]>) -> SubscriptionMessage {
64 let channel = SubscriptionChannel {
65 name: "heartbeat".into(),
66 product_ids: symbols.to_vec(),
67 };
68
69 SubscriptionMessage::new(vec![channel])
70}
71
72#[inline]
74pub fn create_status_subscription() -> SubscriptionMessage {
75 let channel = SubscriptionChannel {
76 name: "status".into(),
77 product_ids: vec![],
78 };
79
80 SubscriptionMessage::new(vec![channel])
81}