Add HTTP PATCH support

This commit is contained in:
BooD 2017-10-05 18:13:40 +03:00
parent 16a0f6b663
commit 8b01385465
2 changed files with 21 additions and 0 deletions

View File

@ -19,6 +19,7 @@ namespace crow
CONNECT, CONNECT,
OPTIONS, OPTIONS,
TRACE, TRACE,
PATCH = 24,
#endif #endif
Delete = 0, Delete = 0,
@ -29,6 +30,7 @@ namespace crow
Connect, Connect,
Options, Options,
Trace, Trace,
Patch = 24,
}; };
inline std::string method_name(HTTPMethod method) inline std::string method_name(HTTPMethod method)
@ -51,6 +53,8 @@ namespace crow
return "OPTIONS"; return "OPTIONS";
case HTTPMethod::Trace: case HTTPMethod::Trace:
return "TRACE"; return "TRACE";
case HTTPMethod::Patch:
return "PATCH";
} }
return "invalid"; return "invalid";
} }
@ -132,6 +136,7 @@ constexpr crow::HTTPMethod operator "" _method(const char* str, size_t /*len*/)
crow::black_magic::is_equ_p(str, "OPTIONS", 7) ? crow::HTTPMethod::Options : crow::black_magic::is_equ_p(str, "OPTIONS", 7) ? crow::HTTPMethod::Options :
crow::black_magic::is_equ_p(str, "CONNECT", 7) ? crow::HTTPMethod::Connect : crow::black_magic::is_equ_p(str, "CONNECT", 7) ? crow::HTTPMethod::Connect :
crow::black_magic::is_equ_p(str, "TRACE", 5) ? crow::HTTPMethod::Trace : crow::black_magic::is_equ_p(str, "TRACE", 5) ? crow::HTTPMethod::Trace :
crow::black_magic::is_equ_p(str, "PATCH", 5) ? crow::HTTPMethod::Patch :
throw std::runtime_error("invalid http method"); throw std::runtime_error("invalid http method");
} }
#endif #endif

View File

@ -324,6 +324,11 @@ TEST(http_method)
([](const request& /*req*/){ ([](const request& /*req*/){
return "post"; return "post";
}); });
CROW_ROUTE(app, "/patch_only")
.methods("PATCH"_method)
([](const request& /*req*/){
return "patch";
});
// cannot have multiple handlers for the same url // cannot have multiple handlers for the same url
@ -361,6 +366,17 @@ TEST(http_method)
ASSERT_EQUAL("get", res.body); ASSERT_EQUAL("get", res.body);
} }
{
request req;
response res;
req.url = "/patch_only";
req.method = "PATCH"_method;
app.handle(req, res);
ASSERT_EQUAL("patch", res.body);
}
{ {
request req; request req;
response res; response res;