From a43b9396aa214b8e5316c756a2e6f992f50d7eb1 Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sun, 28 Feb 2021 10:41:30 -0500 Subject: [PATCH 1/2] feat: more efficient access to HttpRequest data Some applications may want to move the contents of a HttpRequest. --- examples/site/http_form_data/http_form_data.cc | 6 ++++-- google/cloud/functions/http_request.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/site/http_form_data/http_form_data.cc b/examples/site/http_form_data/http_form_data.cc index f02340f5..58254c23 100644 --- a/examples/site/http_form_data/http_form_data.cc +++ b/examples/site/http_form_data/http_form_data.cc @@ -59,7 +59,7 @@ class FormDataDelimiter { } // namespace -gcf::HttpResponse http_form_data(gcf::HttpRequest request) { // NOLINT +gcf::HttpResponse http_form_data(gcf::HttpRequest request) { if (request.verb() != "POST") { return gcf::HttpResponse{}.set_result(gcf::HttpResponse::kMethodNotAllowed); } @@ -72,8 +72,10 @@ gcf::HttpResponse http_form_data(gcf::HttpRequest request) { // NOLINT return gcf::HttpResponse{}.set_result(gcf::HttpResponse::kBadRequest); } auto delimiter = FormDataDelimiter::FromHeader(header->second); + + auto payload = std::move(request).payload(); std::vector parts = - absl::StrSplit(request.payload(), delimiter, absl::SkipEmpty{}); + absl::StrSplit(payload, delimiter, absl::SkipEmpty{}); nlohmann::json result{{"parts", std::vector{}}}; for (auto& p : parts) { std::vector components = diff --git a/google/cloud/functions/http_request.h b/google/cloud/functions/http_request.h index af8e7981..cfb06c5c 100644 --- a/google/cloud/functions/http_request.h +++ b/google/cloud/functions/http_request.h @@ -41,7 +41,8 @@ class HttpRequest { [[nodiscard]] std::string const& target() const { return target_; } /// The request payload - [[nodiscard]] std::string const& payload() const { return payload_; } + [[nodiscard]] std::string const& payload() const & { return payload_; } + [[nodiscard]] std::string&& payload() && { return std::move(payload_); } /// The request HTTP headers [[nodiscard]] HeadersType const& headers() const { return headers_; } From e418342b20518827d0f875e6b6fb8f6e3e826856 Mon Sep 17 00:00:00 2001 From: Carlos O'Ryan Date: Sun, 28 Feb 2021 11:11:08 -0500 Subject: [PATCH 2/2] Fix formatting --- google/cloud/functions/http_request.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google/cloud/functions/http_request.h b/google/cloud/functions/http_request.h index cfb06c5c..50e3fc15 100644 --- a/google/cloud/functions/http_request.h +++ b/google/cloud/functions/http_request.h @@ -41,7 +41,7 @@ class HttpRequest { [[nodiscard]] std::string const& target() const { return target_; } /// The request payload - [[nodiscard]] std::string const& payload() const & { return payload_; } + [[nodiscard]] std::string const& payload() const& { return payload_; } [[nodiscard]] std::string&& payload() && { return std::move(payload_); } /// The request HTTP headers