42 std::is_base_of<flatbuffers::Table, InputType>::value,
43 "Input type should be auto-generated FlatBuffers table type"
46 std::is_base_of<flatbuffers::Table, ReturnType>::value,
47 "Return type should be auto-generated FlatBuffers table type"
51 HttpHandlerFlatbufBase(
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
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
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()};
152 const http::HttpRequest& request,
153 request::RequestContext& context
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));