🏗️ Elegant & Highly Performant Async Gemini Server Framework for the Modern Age
async framework gemini-protocol protocol gemini rust
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor(router): simplify context creation

Fuwn 71bbd199 4444f64e

+19 -53
+1
src/context/error.rs
··· 20 20 use url::Url; 21 21 22 22 #[allow(clippy::module_name_repetitions)] 23 + #[derive(Clone)] 23 24 pub struct ErrorContext { 24 25 pub url: Url, 25 26 pub certificate: Option<X509>,
+1
src/context/hook.rs
··· 21 21 use url::Url; 22 22 23 23 #[allow(clippy::module_name_repetitions)] 24 + #[derive(Clone)] 24 25 pub struct HookContext<'a> { 25 26 pub url: Url, 26 27 pub params: Option<Params<'a, 'a>>,
+17 -53
src/router.rs
··· 344 344 url.path().to_string() 345 345 }; 346 346 let route = &mut self.routes.at(&fixed_path); 347 + let peer_certificate = stream.ssl().peer_certificate(); 348 + let hook_context = HookContext::new( 349 + url.clone(), 350 + route 351 + .as_ref() 352 + .map_or(None, |route| Some(route.params.clone())), 353 + peer_certificate.clone(), 354 + ); 347 355 348 356 for module in &mut *self.async_modules.lock().await { 349 - module 350 - .on_pre_route(HookContext::new( 351 - url.clone(), 352 - route 353 - .as_ref() 354 - .map_or(None, |route| Some(route.params.clone())), 355 - stream.ssl().peer_certificate().clone(), 356 - )) 357 - .await; 357 + module.on_pre_route(hook_context.clone()).await; 358 358 } 359 359 360 360 for module in &mut *self.modules.lock().unwrap() { 361 - module.on_pre_route(HookContext::new( 362 - url.clone(), 363 - route 364 - .as_ref() 365 - .map_or(None, |route| Some(route.params.clone())), 366 - stream.ssl().peer_certificate().clone(), 367 - )); 361 + module.on_pre_route(hook_context.clone()); 368 362 } 369 363 370 - (*self.pre_route_callback).lock().unwrap()(HookContext::new( 371 - url.clone(), 372 - route 373 - .as_ref() 374 - .map_or(None, |route| Some(route.params.clone())), 375 - stream.ssl().peer_certificate(), 376 - )); 364 + (*self.pre_route_callback).lock().unwrap()(hook_context.clone()); 377 365 378 - let peer_certificate = stream.ssl().peer_certificate(); 379 366 let mut content = if let Ok(ref route) = route { 380 367 let footers_length = (*self.footers.lock().unwrap()).len(); 381 - let route_context = RouteContext::new( 382 - url.clone(), 383 - route.params.clone(), 384 - stream.ssl().peer_certificate(), 385 - ); 368 + let route_context = 369 + RouteContext::new(url.clone(), route.params.clone(), peer_certificate); 386 370 387 371 for partial_header in &mut *self.headers.lock().unwrap() { 388 372 header ··· 411 395 } else { 412 396 (*self.error_handler).lock().unwrap()(ErrorContext::new( 413 397 url.clone(), 414 - peer_certificate.clone(), 398 + peer_certificate, 415 399 )) 416 400 }; 417 401 418 402 for module in &mut *self.async_modules.lock().await { 419 - module 420 - .on_post_route(HookContext::new( 421 - url.clone(), 422 - route 423 - .as_ref() 424 - .map_or(None, |route| Some(route.params.clone())), 425 - stream.ssl().peer_certificate().clone(), 426 - )) 427 - .await; 403 + module.on_post_route(hook_context.clone()).await; 428 404 } 429 405 430 406 for module in &mut *self.modules.lock().unwrap() { 431 - module.on_post_route(HookContext::new( 432 - url.clone(), 433 - route 434 - .as_ref() 435 - .map_or(None, |route| Some(route.params.clone())), 436 - stream.ssl().peer_certificate().clone(), 437 - )); 407 + module.on_post_route(hook_context.clone()); 438 408 } 439 409 440 410 (*self.post_route_callback).lock().unwrap()( 441 - HookContext::new( 442 - url.clone(), 443 - route 444 - .as_ref() 445 - .map_or(None, |route| Some(route.params.clone())), 446 - stream.ssl().peer_certificate(), 447 - ), 411 + hook_context.clone(), 448 412 &mut content, 449 413 ); 450 414