Add patch to supported codegen http methods

This commit is contained in:
Glade Miller 2019-06-03 11:33:41 -06:00
parent c3af0dc371
commit 793f1b9513
3 changed files with 27 additions and 2 deletions

View File

@ -15,6 +15,7 @@
//! - [connect](attr.connect.html) //! - [connect](attr.connect.html)
//! - [options](attr.options.html) //! - [options](attr.options.html)
//! - [trace](attr.trace.html) //! - [trace](attr.trace.html)
//! - [patch](attr.patch.html)
//! //!
//! ### Attributes: //! ### Attributes:
//! //!
@ -143,4 +144,16 @@ pub fn trace(args: TokenStream, input: TokenStream) -> TokenStream {
let args = parse_macro_input!(args as syn::AttributeArgs); let args = parse_macro_input!(args as syn::AttributeArgs);
let gen = route::Args::new(&args, input, route::GuardType::Trace); let gen = route::Args::new(&args, input, route::GuardType::Trace);
gen.generate() 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()
} }

View File

@ -28,7 +28,8 @@ pub enum GuardType {
Head, Head,
Connect, Connect,
Options, Options,
Trace Trace,
Patch
} }
impl fmt::Display for GuardType { impl fmt::Display for GuardType {
@ -42,6 +43,7 @@ impl fmt::Display for GuardType {
&GuardType::Connect => write!(f, "Connect"), &GuardType::Connect => write!(f, "Connect"),
&GuardType::Options => write!(f, "Options"), &GuardType::Options => write!(f, "Options"),
&GuardType::Trace => write!(f, "Trace"), &GuardType::Trace => write!(f, "Trace"),
&GuardType::Patch => write!(f, "Patch"),
} }
} }
} }

View File

@ -1,7 +1,7 @@
use actix_http::HttpService; use actix_http::HttpService;
use actix_http_test::TestServer; use actix_http_test::TestServer;
use actix_web::{http, web::Path, App, HttpResponse, Responder}; 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}; use futures::{future, Future};
#[get("/test")] #[get("/test")]
@ -14,6 +14,11 @@ fn put_test() -> impl Responder {
HttpResponse::Created() HttpResponse::Created()
} }
#[patch("/test")]
fn patch_test() -> impl Responder {
HttpResponse::Ok()
}
#[post("/test")] #[post("/test")]
fn post_test() -> impl Responder { fn post_test() -> impl Responder {
HttpResponse::NoContent() HttpResponse::NoContent()
@ -99,6 +104,7 @@ fn test_body() {
.service(connect_test) .service(connect_test)
.service(options_test) .service(options_test)
.service(trace_test) .service(trace_test)
.service(patch_test)
.service(test), .service(test),
) )
}); });
@ -122,6 +128,10 @@ fn test_body() {
let response = srv.block_on(request.send()).unwrap(); let response = srv.block_on(request.send()).unwrap();
assert!(response.status().is_success()); 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 request = srv.request(http::Method::PUT, srv.url("/test"));
let response = srv.block_on(request.send()).unwrap(); let response = srv.block_on(request.send()).unwrap();
assert!(response.status().is_success()); assert!(response.status().is_success());