rusty_common/websocket/bridge/
message_router.rs1use super::super::{Message, WebSocketResult};
6use std::any::Any;
7
8#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
10pub enum SubscriptionType {
11 Trades,
13 OrderBook,
15 Instruments,
17 Orders,
19 Balances,
21 Custom(&'static str),
23}
24
25pub struct RoutedMessage {
27 pub subscription_key: String,
29 pub subscription_type: SubscriptionType,
31 pub payload: Box<dyn Any + Send>,
33}
34
35pub trait MessageRouter: Send + Sync {
37 fn route_message(&self, message: &Message) -> WebSocketResult<Option<RoutedMessage>>;
41
42 fn get_subscription_key(&self, symbol: &str, sub_type: SubscriptionType) -> String {
44 match sub_type {
45 SubscriptionType::Trades => format!("trades:{symbol}"),
46 SubscriptionType::OrderBook => format!("orderbook:{symbol}"),
47 SubscriptionType::Instruments => format!("instruments:{symbol}"),
48 SubscriptionType::Orders => format!("orders:{symbol}"),
49 SubscriptionType::Balances => "balances".to_string(),
50 SubscriptionType::Custom(name) => format!("{name}:{symbol}"),
51 }
52 }
53}