From 793f1b951392a9ac0506994e52777bd437824c07 Mon Sep 17 00:00:00 2001 From: Glade Miller Date: Mon, 3 Jun 2019 11:33:41 -0600 Subject: [PATCH] Add patch to supported codegen http methods --- actix-web-codegen/src/lib.rs | 13 +++++++++++++ actix-web-codegen/src/route.rs | 4 +++- actix-web-codegen/tests/test_macro.rs | 12 +++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/actix-web-codegen/src/lib.rs b/actix-web-codegen/src/lib.rs index dfa3079b0..99abbb6a3 100644 --- a/actix-web-codegen/src/lib.rs +++ b/actix-web-codegen/src/lib.rs @@ -15,6 +15,7 @@ //! - [connect](attr.connect.html) //! - [options](attr.options.html) //! - [trace](attr.trace.html) +//! - [patch](attr.patch.html) //! //! ### Attributes: //! @@ -143,4 +144,16 @@ pub fn trace(args: TokenStream, input: TokenStream) -> TokenStream { let args = parse_macro_input!(args as syn::AttributeArgs); let gen = route::Args::new(&args, input, route::GuardType::Trace); gen.generate() +} + +/// Creates route handler with `PATCH` method guard. +/// +/// Syntax: `#[patch("path"[, attributes])]` +/// +/// Attributes are the same as in [patch](attr.patch.html) +#[proc_macro_attribute] +pub fn patch(args: TokenStream, input: TokenStream) -> TokenStream { + let args = parse_macro_input!(args as syn::AttributeArgs); + let gen = route::Args::new(&args, input, route::GuardType::Patch); + gen.generate() } \ No newline at end of file diff --git a/actix-web-codegen/src/route.rs b/actix-web-codegen/src/route.rs index 3908f6a8b..3b890c1cb 100644 --- a/actix-web-codegen/src/route.rs +++ b/actix-web-codegen/src/route.rs @@ -28,7 +28,8 @@ pub enum GuardType { Head, Connect, Options, - Trace + Trace, + Patch } impl fmt::Display for GuardType { @@ -42,6 +43,7 @@ impl fmt::Display for GuardType { &GuardType::Connect => write!(f, "Connect"), &GuardType::Options => write!(f, "Options"), &GuardType::Trace => write!(f, "Trace"), + &GuardType::Patch => write!(f, "Patch"), } } } diff --git a/actix-web-codegen/tests/test_macro.rs b/actix-web-codegen/tests/test_macro.rs index 3f1cff54b..718728879 100644 --- a/actix-web-codegen/tests/test_macro.rs +++ b/actix-web-codegen/tests/test_macro.rs @@ -1,7 +1,7 @@ use actix_http::HttpService; use actix_http_test::TestServer; use actix_web::{http, web::Path, App, HttpResponse, Responder}; -use actix_web_codegen::{delete, get, post, put, head, connect, options, trace}; +use actix_web_codegen::{delete, get, post, put, patch, head, connect, options, trace}; use futures::{future, Future}; #[get("/test")] @@ -14,6 +14,11 @@ fn put_test() -> impl Responder { HttpResponse::Created() } +#[patch("/test")] +fn patch_test() -> impl Responder { + HttpResponse::Ok() +} + #[post("/test")] fn post_test() -> impl Responder { HttpResponse::NoContent() @@ -99,6 +104,7 @@ fn test_body() { .service(connect_test) .service(options_test) .service(trace_test) + .service(patch_test) .service(test), ) }); @@ -122,6 +128,10 @@ fn test_body() { let response = srv.block_on(request.send()).unwrap(); assert!(response.status().is_success()); + let request = srv.request(http::Method::PATCH, srv.url("/test")); + let response = srv.block_on(request.send()).unwrap(); + assert!(response.status().is_success()); + let request = srv.request(http::Method::PUT, srv.url("/test")); let response = srv.block_on(request.send()).unwrap(); assert!(response.status().is_success());