43 "Input type should be auto-generated FlatBuffers table type"
47 "Return type should be auto-generated FlatBuffers table type"
51 HttpHandlerFlatbufBase(
52 const components::ComponentConfig& config,
53 const components::ComponentContext& component_context
58 virtual typename ReturnType::NativeTableType HandleRequestFlatbufThrow(
59 const http::HttpRequest& request,
60 const typename InputType::NativeTableType& input,
61 request::RequestContext& context
72 static yaml_config::Schema GetStaticConfigSchema();
77 const http::HttpRequest& request,
78 request::RequestContext& context,
79 const std::string& request_body
84 const http::HttpRequest& request,
85 request::RequestContext& context,
86 const std::string& response_data
89 void ParseRequestData(
const http::HttpRequest& request, request::RequestContext& context)
const final;
101 const http::HttpRequest& request,
102 request::RequestContext& context
104 const auto& input = context.GetData<
const typename InputType::NativeTableType&>(impl::kFlatbufRequestDataName);
106 const auto& ret = context.SetData(
107 std::string{impl::kFlatbufResponseDataName}, HandleRequestFlatbufThrow(request, input, context)
110 flatbuffers::FlatBufferBuilder fbb;
111 auto ret_fbb = ReturnType::Pack(fbb, &ret);
113 return {
reinterpret_cast<
const char*>(fbb.GetBufferPointer()), fbb.GetSize()};
132 const http::HttpRequest&,
133 request::RequestContext&,
134 const std::string& request_body
136 size_t limit = GetConfig().request_body_size_log_limit;
137 return utils::log::ToLimitedHex(request_body, limit);
142 const http::HttpRequest&,
143 request::RequestContext&,
144 const std::string& response_data
146 size_t limit = GetConfig().response_data_size_log_limit;
147 return utils::log::ToLimitedHex(response_data, limit);
152 const http::HttpRequest& request,
153 request::RequestContext& context
155 const auto& body = request.RequestBody();
156 const auto* input_fbb = flatbuffers::GetRoot<InputType>(body.data());
157 flatbuffers::Verifier verifier(
reinterpret_cast<
const uint8_t*>(body.data()), body.size());
158 if (!input_fbb->Verify(verifier)) {
159 throw ClientError(InternalMessage{
"Invalid FlatBuffers format in request body"});
162 typename InputType::NativeTableType input;
163 input_fbb->UnPackTo(&input);
165 context.SetData(std::string{impl::kFlatbufRequestDataName}, std::move(input));