a3s_boot/websocket/
context.rs1use super::gateway::WebSocketGatewayDefinition;
2use super::server::WebSocketGatewayServer;
3use crate::{BootRequest, ExecutionContext};
4use std::ops::Deref;
5
6#[derive(Debug, Clone)]
8pub struct WebSocketContext {
9 pub request: BootRequest,
10 pub gateway_path: String,
11 pub event: String,
12 pub namespace: Option<String>,
13 pub module_name: Option<String>,
14 server: WebSocketGatewayServer,
15 execution_context: ExecutionContext,
16}
17
18impl WebSocketContext {
19 pub(crate) fn new(
20 gateway: &WebSocketGatewayDefinition,
21 request: BootRequest,
22 event: &str,
23 ) -> Self {
24 let gateway_path = gateway.path().to_string();
25 let event = event.to_string();
26 let namespace = gateway.namespace().map(str::to_string);
27 let module_name = gateway.module_name().map(str::to_string);
28 let metadata = gateway
29 .event_metadata(&event)
30 .cloned()
31 .unwrap_or_else(|| gateway.metadata().clone());
32 let execution_context = ExecutionContext::websocket(
33 request.clone(),
34 gateway_path.clone(),
35 event.clone(),
36 namespace.clone(),
37 module_name.clone(),
38 metadata,
39 );
40 Self {
41 request,
42 gateway_path,
43 event,
44 namespace,
45 module_name,
46 server: gateway.server(),
47 execution_context,
48 }
49 }
50
51 pub fn server(&self) -> WebSocketGatewayServer {
52 self.server.clone()
53 }
54
55 pub fn execution_context(&self) -> &ExecutionContext {
56 &self.execution_context
57 }
58
59 pub fn into_execution_context(self) -> ExecutionContext {
60 self.execution_context
61 }
62}
63
64impl Deref for WebSocketContext {
65 type Target = ExecutionContext;
66
67 fn deref(&self) -> &Self::Target {
68 self.execution_context()
69 }
70}
71
72#[derive(Debug, Clone)]
74pub struct WebSocketGatewayInitContext {
75 pub gateway_path: String,
76 pub namespace: Option<String>,
77 pub module_name: Option<String>,
78 pub events: Vec<String>,
79 server: WebSocketGatewayServer,
80}
81
82impl WebSocketGatewayInitContext {
83 pub(crate) fn new(gateway: &WebSocketGatewayDefinition) -> Self {
84 Self {
85 gateway_path: gateway.path().to_string(),
86 namespace: gateway.namespace().map(str::to_string),
87 module_name: gateway.module_name().map(str::to_string),
88 events: gateway.events().into_iter().map(str::to_string).collect(),
89 server: gateway.server(),
90 }
91 }
92
93 pub fn server(&self) -> WebSocketGatewayServer {
94 self.server.clone()
95 }
96}