pub const MAX_STREAMS_PER_CONNECTION: usize = 1024;
pub const MAX_CONNECTIONS: usize = 20;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum StreamType {
Trade,
BestBidAsk,
DepthDiff,
DepthSnapshot { levels: u8 },
}
impl StreamType {
#[must_use]
pub fn stream_name(&self, symbol: &str) -> String {
let symbol_lower = symbol.to_lowercase();
match self {
Self::Trade => format!("{symbol_lower}@trade"),
Self::BestBidAsk => format!("{symbol_lower}@bestBidAsk"),
Self::DepthDiff => format!("{symbol_lower}@depth"),
Self::DepthSnapshot { levels } => format!("{symbol_lower}@depth{levels}"),
}
}
}
#[cfg(test)]
mod tests {
use rstest::rstest;
use super::*;
#[rstest]
fn test_stream_names() {
assert_eq!(StreamType::Trade.stream_name("BTCUSDT"), "btcusdt@trade");
assert_eq!(
StreamType::BestBidAsk.stream_name("ETHUSDT"),
"ethusdt@bestBidAsk"
);
assert_eq!(
StreamType::DepthDiff.stream_name("BTCUSDT"),
"btcusdt@depth"
);
assert_eq!(
StreamType::DepthSnapshot { levels: 20 }.stream_name("BTCUSDT"),
"btcusdt@depth20"
);
}
}