next_web_websocket/core/
ws_context.rs1use rudi_dev::Singleton;
2use std::sync::Arc;
3
4use crate::properties::ws_properties::WebSocketProperties;
5
6use super::handler::WebSocketHandler;
7
8#[derive(Clone)]
11pub struct WebSocketContext {
12 properties: WebSocketProperties,
13 handlers: matchit::Router<Arc<dyn WebSocketHandler>>,
14}
15
16impl WebSocketContext {
17 pub fn properties(&self) -> &WebSocketProperties {
19 &self.properties
20 }
21
22 pub fn add_handler(&mut self, path: &str, handler: Arc<dyn WebSocketHandler>) {
24 let _ = self.handlers.insert(path, handler);
25 }
26
27 pub fn get_handler(&self, path: &str) -> Option<&Arc<dyn WebSocketHandler>> {
29 match self.handlers.at(path) {
30 Ok(matched) => Some(matched.value),
31 Err(_) => None
32 }
33 }
34}
35
36#[Singleton]
37impl WebSocketContext {
38 #[autowired]
39 fn private_constructor(#[autowired] properties: WebSocketProperties) -> Self {
40 Self {
41 properties,
42 handlers: matchit::Router::new(),
43 }
44 }
45}