Skip to content

Commit 1a03cac

Browse files
author
lexeyo
committed
refactor core/userver: move json getters/setters from codegen to userver
commit_hash:290f3179b64a3fbbaec535fa26c97f722daea8f0
1 parent a52414a commit 1a03cac

File tree

5 files changed

+70
-23
lines changed

5 files changed

+70
-23
lines changed

.mapping.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,6 +1096,7 @@
10961096
"core/include/userver/server/middlewares/cors.hpp":"taxi/uservices/userver/core/include/userver/server/middlewares/cors.hpp",
10971097
"core/include/userver/server/middlewares/headers_propagator.hpp":"taxi/uservices/userver/core/include/userver/server/middlewares/headers_propagator.hpp",
10981098
"core/include/userver/server/middlewares/http_middleware_base.hpp":"taxi/uservices/userver/core/include/userver/server/middlewares/http_middleware_base.hpp",
1099+
"core/include/userver/server/request/json_data.hpp":"taxi/uservices/userver/core/include/userver/server/request/json_data.hpp",
10991100
"core/include/userver/server/request/request_config.hpp":"taxi/uservices/userver/core/include/userver/server/request/request_config.hpp",
11001101
"core/include/userver/server/request/request_context.hpp":"taxi/uservices/userver/core/include/userver/server/request/request_context.hpp",
11011102
"core/include/userver/server/request/response_base.hpp":"taxi/uservices/userver/core/include/userver/server/request/response_base.hpp",
@@ -1951,6 +1952,7 @@
19511952
"core/src/server/pph_config.hpp":"taxi/uservices/userver/core/src/server/pph_config.hpp",
19521953
"core/src/server/request/internal_request_context.cpp":"taxi/uservices/userver/core/src/server/request/internal_request_context.cpp",
19531954
"core/src/server/request/internal_request_context.hpp":"taxi/uservices/userver/core/src/server/request/internal_request_context.hpp",
1955+
"core/src/server/request/json_data.cpp":"taxi/uservices/userver/core/src/server/request/json_data.cpp",
19541956
"core/src/server/request/request_config.cpp":"taxi/uservices/userver/core/src/server/request/request_config.cpp",
19551957
"core/src/server/request/request_context.cpp":"taxi/uservices/userver/core/src/server/request/request_context.cpp",
19561958
"core/src/server/request/request_context_test.cpp":"taxi/uservices/userver/core/src/server/request/request_context_test.cpp",

core/include/userver/server/handlers/http_handler_json_base.hpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,6 @@ class HttpHandlerJsonBase : public HttpHandlerBase {
4242
static yaml_config::Schema GetStaticConfigSchema();
4343

4444
protected:
45-
/// @returns A pointer to json request if it was parsed successfully or
46-
/// nullptr otherwise.
47-
static const formats::json::Value* GetRequestJson(const request::RequestContext& context);
48-
49-
/// @returns a pointer to json response if it was returned successfully by
50-
/// `HandleRequestJsonThrow()` or nullptr otherwise.
51-
static const formats::json::Value* GetResponseJson(const request::RequestContext& context);
52-
5345
void ParseRequestData(const http::HttpRequest& request, request::RequestContext& context) const override;
5446

5547
private:
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#pragma once
2+
3+
/// @file userver/server/request/json_data.hpp
4+
/// @brief Functions that handle JSON requests and responses stored in context.
5+
6+
#include <userver/formats/json/value.hpp>
7+
#include <userver/server/request/request_context.hpp>
8+
9+
USERVER_NAMESPACE_BEGIN
10+
11+
namespace server::request {
12+
13+
/// @returns A pointer to json request if it was parsed successfully and stored in the context or
14+
/// nullptr otherwise.
15+
const formats::json::Value* GetRequestJson(const RequestContext& context);
16+
17+
/// @brief Saves a parsed json request to the context.
18+
/// @returns A reference to the saved json.
19+
formats::json::Value& SetRequestJson(RequestContext& context, formats::json::Value request_json);
20+
21+
/// @returns A pointer to json response if it was produced successfully and stored in the context
22+
/// or nullptr otherwise.
23+
const formats::json::Value* GetResponseJson(const RequestContext& context);
24+
25+
/// @brief Saves a json response to the context.
26+
/// @returns A reference to the saved json.
27+
formats::json::Value& SetResponseJson(RequestContext& context, formats::json::Value request_json);
28+
29+
} // namespace server::request
30+
31+
USERVER_NAMESPACE_END

core/src/server/handlers/http_handler_json_base.cpp

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <userver/server/handlers/legacy_json_error_builder.hpp>
1111
#include <userver/server/http/http_error.hpp>
1212
#include <userver/server/http/http_status.hpp>
13+
#include <userver/server/request/json_data.hpp>
1314
#include <userver/yaml_config/schema.hpp>
1415

1516
USERVER_NAMESPACE_BEGIN
@@ -18,8 +19,6 @@ namespace server::handlers {
1819

1920
namespace {
2021

21-
const std::string kRequestDataName = "__request_json";
22-
const std::string kResponseDataName = "__response_json";
2322
const std::string kSerializeJson = "serialize_json";
2423

2524
const formats::json::Value kEmptyJson{};
@@ -36,26 +35,19 @@ HttpHandlerJsonBase::HttpHandlerJsonBase(
3635

3736
std::string HttpHandlerJsonBase::HandleRequestThrow(const http::HttpRequest& request, request::RequestContext& context)
3837
const {
39-
const auto& request_json = context.GetData<const formats::json::Value&>(kRequestDataName);
38+
const auto request_json = request::GetRequestJson(context);
39+
UASSERT(request_json != nullptr);
4040

4141
auto& response = request.GetHttpResponse();
4242
response.SetContentType(USERVER_NAMESPACE::http::content_type::kApplicationJson);
4343

44-
const auto& response_json = context.SetData<
45-
formats::json::Value>(kResponseDataName, HandleRequestJsonThrow(request, request_json, context));
44+
const auto&
45+
response_json = request::SetResponseJson(context, HandleRequestJsonThrow(request, *request_json, context));
4646

4747
const auto scope_time = tracing::ScopeTime::CreateOptionalScopeTime(kSerializeJson);
4848
return formats::json::ToString(response_json);
4949
}
5050

51-
const formats::json::Value* HttpHandlerJsonBase::GetRequestJson(const request::RequestContext& context) {
52-
return context.GetDataOptional<const formats::json::Value>(kRequestDataName);
53-
}
54-
55-
const formats::json::Value* HttpHandlerJsonBase::GetResponseJson(const request::RequestContext& context) {
56-
return context.GetDataOptional<const formats::json::Value>(kResponseDataName);
57-
}
58-
5951
FormattedErrorData HttpHandlerJsonBase::GetFormattedExternalErrorBody(const CustomHandlerException& exc) const {
6052
if (exc.GetServiceCode().empty()) {
6153
// Legacy format has no "service codes", only HTTP codes.
@@ -66,12 +58,12 @@ FormattedErrorData HttpHandlerJsonBase::GetFormattedExternalErrorBody(const Cust
6658

6759
void HttpHandlerJsonBase::ParseRequestData(const http::HttpRequest& request, request::RequestContext& context) const {
6860
if (request.RequestBody().empty()) {
69-
context.SetData<formats::json::Value>(kRequestDataName, kEmptyJson);
61+
request::SetRequestJson(context, kEmptyJson);
7062
return;
7163
}
7264

7365
try {
74-
context.SetData<formats::json::Value>(kRequestDataName, formats::json::FromString(request.RequestBody()));
66+
request::SetRequestJson(context, formats::json::FromString(request.RequestBody()));
7567
} catch (const formats::json::Exception& e) {
7668
throw RequestParseError(
7769
InternalMessage{"Invalid JSON body"},
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#include <userver/server/request/json_data.hpp>
2+
3+
USERVER_NAMESPACE_BEGIN
4+
5+
namespace server::request {
6+
7+
namespace {
8+
constexpr std::string_view kRequestDataName = "__request_object_json";
9+
constexpr std::string_view kResponseDataName = "__response_object_json";
10+
} // namespace
11+
12+
const formats::json::Value* GetRequestJson(const RequestContext& context) {
13+
return context.GetDataOptional<const formats::json::Value>(kRequestDataName);
14+
}
15+
16+
formats::json::Value& SetRequestJson(RequestContext& context, formats::json::Value request_json) {
17+
return context.SetData(std::string{kRequestDataName}, std::move(request_json));
18+
}
19+
20+
const formats::json::Value* GetResponseJson(const RequestContext& context) {
21+
return context.GetDataOptional<const formats::json::Value>(kResponseDataName);
22+
}
23+
24+
formats::json::Value& SetResponseJson(RequestContext& context, formats::json::Value request_json) {
25+
return context.SetData(std::string{kResponseDataName}, std::move(request_json));
26+
}
27+
28+
} // namespace server::request
29+
30+
USERVER_NAMESPACE_END

0 commit comments

Comments
 (0)