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)* })? $(, server: { $($server_extra:tt)* })? $(,)? ) => {{
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 .wrap(NormalizePath::new(TrailingSlash::Trim))
25 .wrap(Compress::default());
26 $(
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}