use std::fmt::Display;
use std::fmt::Formatter;
use std::fmt::Result as FmtResult;
use crate::Str;
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub enum Stock {
Symbol(Str),
All,
}
impl Display for Stock {
fn fmt(&self, fmt: &mut Formatter<'_>) -> FmtResult {
match self {
Stock::Symbol(symbol) => write!(fmt, "{}", symbol),
Stock::All => write!(fmt, "*"),
}
}
}
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
pub enum Subscription {
SecondAggregates(Stock),
MinuteAggregates(Stock),
Trades(Stock),
Quotes(Stock),
}
impl Subscription {
pub fn stock(&self) -> &Stock {
match self {
Subscription::SecondAggregates(stock)
| Subscription::MinuteAggregates(stock)
| Subscription::Trades(stock)
| Subscription::Quotes(stock) => stock,
}
}
}
impl Display for Subscription {
fn fmt(&self, fmt: &mut Formatter<'_>) -> FmtResult {
match self {
Subscription::SecondAggregates(stock) => write!(fmt, "A.{}", stock),
Subscription::MinuteAggregates(stock) => write!(fmt, "AM.{}", stock),
Subscription::Trades(stock) => write!(fmt, "T.{}", stock),
Subscription::Quotes(stock) => write!(fmt, "Q.{}", stock),
}
}
}