use super::{
Massive,
market::{MassiveServer, MassiveTradeServer},
};
use crate::{
Identifier,
subscription::{
Subscription,
book::OrderBooksL1,
candle::{CandleInterval, Candles},
quote::Quotes,
trade::PublicTrades,
},
};
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub enum MassiveChannel {
Event(&'static str),
UnsupportedInterval(CandleInterval),
}
impl AsRef<str> for MassiveChannel {
fn as_ref(&self) -> &str {
match self {
Self::Event(event) => event,
Self::UnsupportedInterval(_) => "",
}
}
}
impl<Server, Instrument> Identifier<MassiveChannel>
for Subscription<Massive<Server>, Instrument, PublicTrades>
where
Server: MassiveTradeServer,
{
fn id(&self) -> MassiveChannel {
MassiveChannel::Event(Server::TRADES)
}
}
impl<Server, Instrument> Identifier<MassiveChannel>
for Subscription<Massive<Server>, Instrument, Quotes>
where
Server: MassiveServer,
{
fn id(&self) -> MassiveChannel {
MassiveChannel::Event(Server::QUOTES)
}
}
impl<Server, Instrument> Identifier<MassiveChannel>
for Subscription<Massive<Server>, Instrument, OrderBooksL1>
where
Server: MassiveServer,
{
fn id(&self) -> MassiveChannel {
MassiveChannel::Event(Server::QUOTES)
}
}
impl<Server, Instrument> Identifier<MassiveChannel>
for Subscription<Massive<Server>, Instrument, Candles>
where
Server: MassiveServer,
{
fn id(&self) -> MassiveChannel {
match self.kind.interval {
CandleInterval::Sec1 => MassiveChannel::Event(Server::SECOND_AGGREGATES),
CandleInterval::Min1 => MassiveChannel::Event(Server::MINUTE_AGGREGATES),
other => MassiveChannel::UnsupportedInterval(other),
}
}
}