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}