@@ -48,6 +48,7 @@ pub struct Server {
48
48
websocket_router : Arc < WebSocketRouter > ,
49
49
middleware_router : Arc < MiddlewareRouter > ,
50
50
global_request_headers : Arc < DashMap < String , String > > ,
51
+ global_response_headers : Arc < DashMap < String , String > > ,
51
52
directories : Arc < RwLock < Vec < Directory > > > ,
52
53
startup_handler : Option < Arc < FunctionInfo > > ,
53
54
shutdown_handler : Option < Arc < FunctionInfo > > ,
@@ -63,6 +64,7 @@ impl Server {
63
64
websocket_router : Arc :: new ( WebSocketRouter :: new ( ) ) ,
64
65
middleware_router : Arc :: new ( MiddlewareRouter :: new ( ) ) ,
65
66
global_request_headers : Arc :: new ( DashMap :: new ( ) ) ,
67
+ global_response_headers : Arc :: new ( DashMap :: new ( ) ) ,
66
68
directories : Arc :: new ( RwLock :: new ( Vec :: new ( ) ) ) ,
67
69
startup_handler : None ,
68
70
shutdown_handler : None ,
@@ -92,6 +94,7 @@ impl Server {
92
94
let middleware_router = self . middleware_router . clone ( ) ;
93
95
let web_socket_router = self . websocket_router . clone ( ) ;
94
96
let global_request_headers = self . global_request_headers . clone ( ) ;
97
+ let global_response_headers = self . global_response_headers . clone ( ) ;
95
98
let directories = self . directories . clone ( ) ;
96
99
let workers = Arc :: new ( workers) ;
97
100
@@ -145,7 +148,8 @@ impl Server {
145
148
. app_data ( web:: Data :: new ( router. clone ( ) ) )
146
149
. app_data ( web:: Data :: new ( const_router. clone ( ) ) )
147
150
. app_data ( web:: Data :: new ( middleware_router. clone ( ) ) )
148
- . app_data ( web:: Data :: new ( global_request_headers. clone ( ) ) ) ;
151
+ . app_data ( web:: Data :: new ( global_request_headers. clone ( ) ) )
152
+ . app_data ( web:: Data :: new ( global_response_headers. clone ( ) ) ) ;
149
153
150
154
let web_socket_map = web_socket_router. get_web_socket_map ( ) ;
151
155
for ( elem, value) in ( web_socket_map. read ( ) . unwrap ( ) ) . iter ( ) {
@@ -165,6 +169,7 @@ impl Server {
165
169
const_router : web:: Data < Arc < ConstRouter > > ,
166
170
middleware_router : web:: Data < Arc < MiddlewareRouter > > ,
167
171
global_request_headers,
172
+ global_response_headers,
168
173
body,
169
174
req| {
170
175
pyo3_asyncio:: tokio:: scope_local ( task_locals. clone ( ) , async move {
@@ -173,6 +178,7 @@ impl Server {
173
178
const_router,
174
179
middleware_router,
175
180
global_request_headers,
181
+ global_response_headers,
176
182
body,
177
183
req,
178
184
)
@@ -223,19 +229,32 @@ impl Server {
223
229
} ) ;
224
230
}
225
231
226
- /// Adds a new header to our concurrent hashmap
232
+ /// Adds a new request header to our concurrent hashmap
227
233
/// this can be called after the server has started.
228
234
pub fn add_request_header ( & self , key : & str , value : & str ) {
229
235
self . global_request_headers
230
236
. insert ( key. to_string ( ) , value. to_string ( ) ) ;
231
237
}
232
238
233
- /// Removes a new header to our concurrent hashmap
239
+ /// Adds a new response header to our concurrent hashmap
240
+ /// this can be called after the server has started.
241
+ pub fn add_response_header ( & self , key : & str , value : & str ) {
242
+ self . global_response_headers
243
+ . insert ( key. to_string ( ) , value. to_string ( ) ) ;
244
+ }
245
+
246
+ /// Removes a new request header to our concurrent hashmap
234
247
/// this can be called after the server has started.
235
248
pub fn remove_header ( & self , key : & str ) {
236
249
self . global_request_headers . remove ( key) ;
237
250
}
238
251
252
+ /// Removes a new response header to our concurrent hashmap
253
+ /// this can be called after the server has started.
254
+ pub fn remove_response_header ( & self , key : & str ) {
255
+ self . global_response_headers . remove ( key) ;
256
+ }
257
+
239
258
/// Add a new route to the routing tables
240
259
/// can be called after the server has been started
241
260
pub fn add_route (
@@ -345,6 +364,7 @@ async fn index(
345
364
const_router : web:: Data < Arc < ConstRouter > > ,
346
365
middleware_router : web:: Data < Arc < MiddlewareRouter > > ,
347
366
global_request_headers : web:: Data < Arc < Headers > > ,
367
+ global_response_headers : web:: Data < Arc < Headers > > ,
348
368
body : Bytes ,
349
369
req : HttpRequest ,
350
370
) -> impl Responder {
@@ -360,6 +380,7 @@ async fn index(
360
380
361
381
let mut response_builder = HttpResponse :: Ok ( ) ;
362
382
apply_dashmap_headers ( & mut response_builder, & global_request_headers) ;
383
+ apply_dashmap_headers ( & mut response_builder, & global_response_headers) ;
363
384
apply_hashmap_headers ( & mut response_builder, & request. headers ) ;
364
385
365
386
let response = if let Some ( r) = const_router. get_route ( req. method ( ) , req. uri ( ) . path ( ) ) {
0 commit comments