rustrade_data/exchange/massive/
channel.rs1use super::{
4 Massive,
5 market::{MassiveServer, MassiveTradeServer},
6};
7use crate::{
8 Identifier,
9 subscription::{
10 Subscription,
11 book::OrderBooksL1,
12 candle::{CandleInterval, Candles},
13 quote::Quotes,
14 trade::PublicTrades,
15 },
16};
17
18#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
23pub enum MassiveChannel {
24 Event(&'static str),
26 UnsupportedInterval(CandleInterval),
29}
30
31impl AsRef<str> for MassiveChannel {
32 fn as_ref(&self) -> &str {
34 match self {
35 Self::Event(event) => event,
36 Self::UnsupportedInterval(_) => "",
37 }
38 }
39}
40
41impl<Server, Instrument> Identifier<MassiveChannel>
42 for Subscription<Massive<Server>, Instrument, PublicTrades>
43where
44 Server: MassiveTradeServer,
45{
46 fn id(&self) -> MassiveChannel {
47 MassiveChannel::Event(Server::TRADES)
48 }
49}
50
51impl<Server, Instrument> Identifier<MassiveChannel>
52 for Subscription<Massive<Server>, Instrument, Quotes>
53where
54 Server: MassiveServer,
55{
56 fn id(&self) -> MassiveChannel {
57 MassiveChannel::Event(Server::QUOTES)
58 }
59}
60
61impl<Server, Instrument> Identifier<MassiveChannel>
63 for Subscription<Massive<Server>, Instrument, OrderBooksL1>
64where
65 Server: MassiveServer,
66{
67 fn id(&self) -> MassiveChannel {
68 MassiveChannel::Event(Server::QUOTES)
69 }
70}
71
72impl<Server, Instrument> Identifier<MassiveChannel>
73 for Subscription<Massive<Server>, Instrument, Candles>
74where
75 Server: MassiveServer,
76{
77 fn id(&self) -> MassiveChannel {
78 match self.kind.interval {
79 CandleInterval::Sec1 => MassiveChannel::Event(Server::SECOND_AGGREGATES),
80 CandleInterval::Min1 => MassiveChannel::Event(Server::MINUTE_AGGREGATES),
81 other => MassiveChannel::UnsupportedInterval(other),
82 }
83 }
84}