1#[macro_export]
2macro_rules! run {
3 (
4 addr: $addr:expr
6 $(, state: $state:expr )?
7 $(, config: $config:expr )?
8 $(, configure_app: |$app:ident| $app_body:expr )?
9 $(, configure_server: |$server:ident| $server_body:expr )?
10 $(,)? ) => {{
12 use actix_web::{web, App, HttpServer};
13 use std::net::SocketAddr;
14
15 let bind_addr: SocketAddr = $addr.parse()
16 .expect("Invalid socket address format");
17
18 let mut server = HttpServer::new(move || {
19 let mut app = App::new()
20 .wrap(actix_web::middleware::NormalizePath::new(actix_web::middleware::TrailingSlash::Trim))
21 .wrap(actix_web::middleware::Compress::default());
22
23 $(
25 app = app.app_data(web::Data::new($state.clone()));
26 )?
27
28 $(
30 let mut $app = app;
31 $app = $app_body;
32 app = $app;
33 )?
34
35 $(
37 app = app.configure($config);
38 )?
39
40 app
41 })
42 .bind(bind_addr)?;
43
44 $(
46 let mut $server = server;
47 $server = $server_body;
48 server = $server;
49 )?
50
51 server.run().await
52 }};
53}