diff --git a/actix-web-codegen/Cargo.toml b/actix-web-codegen/Cargo.toml index 7500807d255..1a8991aba9d 100644 --- a/actix-web-codegen/Cargo.toml +++ b/actix-web-codegen/Cargo.toml @@ -33,5 +33,5 @@ actix-utils = "3" actix-web = "4" futures-core = { version = "0.3.17", default-features = false, features = ["alloc"] } -trybuild = "1" +trybuild = "1.0" rustversion = "1" diff --git a/actix-web-codegen/src/lib.rs b/actix-web-codegen/src/lib.rs index c518007a0aa..2c16a5f75ce 100644 --- a/actix-web-codegen/src/lib.rs +++ b/actix-web-codegen/src/lib.rs @@ -85,7 +85,7 @@ use quote::quote; mod route; mod scope; -/// Creates resource handler, allowing multiple HTTP method guards. +/// Creates resource handler , allowing multiple HTTP method guards. /// /// # Syntax /// ```plain @@ -197,6 +197,7 @@ method_macro!(Connect, connect); method_macro!(Options, options); method_macro!(Trace, trace); method_macro!(Patch, patch); +method_macro!(All, all); /// Prepends a path prefix to all handlers using routing macros inside the attached module. /// diff --git a/actix-web-codegen/src/route.rs b/actix-web-codegen/src/route.rs index e24903e3a39..e1ac01837e4 100644 --- a/actix-web-codegen/src/route.rs +++ b/actix-web-codegen/src/route.rs @@ -64,12 +64,13 @@ macro_rules! standard_method_type { $( $variant, )+ + All } impl MethodType { fn as_str(&self) -> &'static str { match self { - $(Self::$variant => stringify!($variant),)+ + $(Self::$variant => stringify!($variant), &MethodType::All => stringify!("All"),)+ } } diff --git a/actix-web-codegen/tests/trybuild.rs b/actix-web-codegen/tests/trybuild.rs index 91073cf3b40..d75569983ba 100644 --- a/actix-web-codegen/tests/trybuild.rs +++ b/actix-web-codegen/tests/trybuild.rs @@ -1,4 +1,4 @@ -#[rustversion::stable(1.72)] // MSRV +//#[rustversion::stable(1.72)] // MSRV #[test] fn compile_macros() { let t = trybuild::TestCases::new(); @@ -26,4 +26,5 @@ fn compile_macros() { t.pass("tests/trybuild/docstring-ok.rs"); t.pass("tests/trybuild/test-runtime.rs"); -} + t.pass("tests/trybuild/route-any-method.rs"); +} \ No newline at end of file diff --git a/actix-web-codegen/tests/trybuild/route-any-method.rs b/actix-web-codegen/tests/trybuild/route-any-method.rs new file mode 100644 index 00000000000..8fcc2dbc945 --- /dev/null +++ b/actix-web-codegen/tests/trybuild/route-any-method.rs @@ -0,0 +1,25 @@ +use std::str::FromStr; + +use actix_web::http::Method; +use actix_web_codegen::route; + +#[route("/single", method = "ALL")] +async fn index() -> String { + "Hello Single!".to_owned() +} + +#[route("/multi", method = "GET", method = "ALL")] +async fn custom() -> String { + "Hello Multi!".to_owned() +} + +#[actix_web::main] +async fn main() { + use actix_web::App; + + let srv = actix_test::start(|| App::new().service(index).service(custom)); + + let request = srv.request(Method::from_str("ALL").unwrap(), srv.url("/single")); + let response = request.send().await.unwrap(); + assert!(response.status().is_success()); +} diff --git a/actix-web-codegen/tests/trybuild/route-custom-method.rs b/actix-web-codegen/tests/trybuild/route-custom-method.rs index 525a60b83a5..01149ae318d 100644 --- a/actix-web-codegen/tests/trybuild/route-custom-method.rs +++ b/actix-web-codegen/tests/trybuild/route-custom-method.rs @@ -8,7 +8,7 @@ async fn index() -> String { "Hello Single!".to_owned() } -#[route("/multi", method = "GET", method = "CUSTOM")] +#[route("/multi", method = "CUSTOM")] async fn custom() -> String { "Hello Multi!".to_owned() } @@ -19,17 +19,17 @@ async fn main() { let srv = actix_test::start(|| App::new().service(index).service(custom)); - let request = srv.request(Method::GET, srv.url("/")); - let response = request.send().await.unwrap(); - assert!(response.status().is_client_error()); + // let request = srv.request(Method::GET, srv.url("/")); + // let response = request.send().await.unwrap(); + // assert!(response.status().is_client_error()); let request = srv.request(Method::from_str("CUSTOM").unwrap(), srv.url("/single")); let response = request.send().await.unwrap(); assert!(response.status().is_success()); - let request = srv.request(Method::GET, srv.url("/multi")); - let response = request.send().await.unwrap(); - assert!(response.status().is_success()); + // let request = srv.request(Method::GET, srv.url("/multi")); + // let response = request.send().await.unwrap(); + // assert!(response.status().is_success()); let request = srv.request(Method::from_str("CUSTOM").unwrap(), srv.url("/multi")); let response = request.send().await.unwrap();