From e46cda52280007cc459b3856a5df87345e9e5b93 Mon Sep 17 00:00:00 2001
From: Ibraheem Ahmed <ibrah1440@gmail.com>
Date: Tue, 8 Jun 2021 17:44:56 -0400
Subject: [PATCH] Deduplicate rt::main macro logic (#2255)

---
 Cargo.toml                   |  2 +-
 actix-web-codegen/src/lib.rs | 23 +++--------------------
 2 files changed, 4 insertions(+), 21 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index 6893067d..bd4cdd91 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -58,7 +58,7 @@ rustls = ["actix-http/rustls", "actix-tls/accept", "actix-tls/rustls"]
 
 [dependencies]
 actix-codec = "0.4.0"
-actix-macros = "0.2.0"
+actix-macros = "0.2.1"
 actix-router = "0.2.7"
 actix-rt = "2.2"
 actix-server = "2.0.0-beta.3"
diff --git a/actix-web-codegen/src/lib.rs b/actix-web-codegen/src/lib.rs
index 33634501..2237f422 100644
--- a/actix-web-codegen/src/lib.rs
+++ b/actix-web-codegen/src/lib.rs
@@ -171,27 +171,10 @@ method_macro! {
 #[proc_macro_attribute]
 pub fn main(_: TokenStream, item: TokenStream) -> TokenStream {
     use quote::quote;
-
-    let mut input = syn::parse_macro_input!(item as syn::ItemFn);
-    let attrs = &input.attrs;
-    let vis = &input.vis;
-    let sig = &mut input.sig;
-    let body = &input.block;
-
-    if sig.asyncness.is_none() {
-        return syn::Error::new_spanned(sig.fn_token, "only async fn is supported")
-            .to_compile_error()
-            .into();
-    }
-
-    sig.asyncness = None;
-
+    let input = syn::parse_macro_input!(item as syn::ItemFn);
     (quote! {
-        #(#attrs)*
-        #vis #sig {
-            actix_web::rt::System::new()
-                .block_on(async move { #body })
-        }
+        #[actix_web::rt::main(system = "::actix_web::rt::System")]
+        #input
     })
     .into()
 }