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)
//! - [options](attr.options.html)
//! - [trace](attr.trace.html)
//! - [patch](attr.patch.html)
//!
//! ### Attributes:
//!
@ -144,3 +145,15 @@ pub fn trace(args: TokenStream, input: TokenStream) -> TokenStream {
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()
}

View File

@ -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"),
}
}
}

View File

@ -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());