Skip to main content

fr_rust/server/
run.rs

1#[macro_export]
2macro_rules! run_server {
3    (
4        state: $state:expr,
5        config: $config:expr,
6        addr: $addr:expr
7        $(, app: { $($app_extra:tt)* })?          // Extra stuff after App::new()
8        $(, server: { $($server_extra:tt)* })?    // Extra stuff after .bind()
9        $(,)?                                      // Optional trailing comma
10    ) => {{
11        use actix_web::{web, App, HttpServer};
12        use actix_web::middleware::{Compress, NormalizePath, TrailingSlash};
13        use std::net::SocketAddr;
14
15        let bind_addr: SocketAddr = $addr.parse()
16            .expect("Invalid socket address format");
17
18        log::info!("Starting server on {}", bind_addr);
19
20        HttpServer::new(move || {
21            let mut app = App::new()
22                .app_data(web::Data::new($state.clone()))
23                // === Security & Performance Middleware (always included) ===
24                .wrap(NormalizePath::new(TrailingSlash::Trim))
25                .wrap(Compress::default());
26            // User can add more middleware / services / app_data here
27            $(
28                app = app $($app_extra)*;
29            )?
30            app.configure($config)
31        })
32        .bind(bind_addr)?
33        $(
34            .$($server_extra)*
35        )?
36        .run()
37        .await
38    }};
39}