kit_rs/middleware/registry.rs
1//! Middleware registry for global middleware
2//!
3//! Configure global middleware using the `Server::middleware()` builder method.
4
5use super::{into_boxed, BoxedMiddleware, Middleware};
6
7/// Registry for global middleware that runs on every request
8///
9/// # Example
10///
11/// ```rust,ignore
12/// Server::from_config(router)
13/// .middleware(LoggingMiddleware) // Global middleware
14/// .middleware(CorsMiddleware)
15/// .run()
16/// .await;
17/// ```
18pub struct MiddlewareRegistry {
19 /// Middleware that runs on every request (in order)
20 global: Vec<BoxedMiddleware>,
21}
22
23impl MiddlewareRegistry {
24 /// Create a new empty middleware registry
25 pub fn new() -> Self {
26 Self {
27 global: Vec::new(),
28 }
29 }
30
31 /// Append global middleware that runs on every request
32 ///
33 /// Global middleware runs in the order they are added, before any
34 /// route-specific middleware.
35 ///
36 /// # Example
37 ///
38 /// ```rust,ignore
39 /// m.append(LoggingMiddleware)
40 /// .append(CorsMiddleware)
41 /// ```
42 pub fn append<M: Middleware + 'static>(mut self, middleware: M) -> Self {
43 self.global.push(into_boxed(middleware));
44 self
45 }
46
47 /// Get the list of global middleware
48 pub fn global_middleware(&self) -> &[BoxedMiddleware] {
49 &self.global
50 }
51}
52
53impl Default for MiddlewareRegistry {
54 fn default() -> Self {
55 Self::new()
56 }
57}